Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中具有相同名称的局部变量和方法?_Ruby_Object_Methods - Fatal编程技术网

Ruby中具有相同名称的局部变量和方法?

Ruby中具有相同名称的局部变量和方法?,ruby,object,methods,Ruby,Object,Methods,第一个gen_times.class给出一个ArgumentError,因此我假设它返回gen_times返回值的类名,这将在下一行中确认 然后,我分配gen_时间,它就变成了Fixnum。但是,我仍然可以使用gen_时间返回进程 我记得Fixnum对象有立即值,并且对象本身用于赋值,而不是对它的引用 那么,说gen_times是一个引用方法的Fixnum对象对吗?在ruby中,可以使用相同名称的局部变量和方法。这有一些复杂性,例如类中的setter方法: def gen_times(facto

第一个gen_times.class给出一个ArgumentError,因此我假设它返回gen_times返回值的类名,这将在下一行中确认

然后,我分配gen_时间,它就变成了Fixnum。但是,我仍然可以使用gen_时间返回进程

我记得Fixnum对象有立即值,并且对象本身用于赋值,而不是对它的引用


那么,说gen_times是一个引用方法的Fixnum对象对吗?

在ruby中,可以使用相同名称的局部变量和方法。这有一些复杂性,例如类中的setter方法:

def gen_times(factor) do
  return Proc.new {|n| n*factor}
end

gen_times.class # ArgumentError 0 for 1
gen_times(3).class # Proc
gen_times = 2
gen_times.class # Fixnum
times3 = gen_times(3) # A normal, working Proc
t1对象的代码将返回预期的结果,但t2的代码将返回nil,因为make_active方法实际上是在创建局部变量,而不是调用active=method。您需要将self.active=true写入以使其生效


当您编写gen_类时,ruby尝试访问局部变量,如果它未定义,ruby尝试调用方法。您可以通过编写gen_class()来显式调用方法。

局部变量和局部函数可以使用相同的名称。为了明确地区分它们,可以使用括号。我不得不读了几遍才能弄清楚你在问什么。我认为最好是将运行代码的结果与代码本身内联,或者作为注释,或者以“我尝试了这个:……然后发生了这个:……所以我尝试了这个:……然后发生了那个……”的格式显示出来
class Test
  def active
    @active
  end

  def active=(value)
    @active = value
  end

  def make_active
    active = true
  end
end

t1 = Test.new
t1.active = true
t1.active #=> true

t2 = Test.new
t2.make_active
t2.active #=> nil