为什么这个方法返回 1 而不是死于无限递归?
def foo
foo ||= 1
end
foo # => 1
按照以下方式重写它确实死了:
def foo
foo.nil? ? 1 : foo
end
最佳答案
在第一种情况下,foo ||= 1
指的是一个局部变量。当你对裸字赋值时,Ruby 总是创建一个局部变量,这就是为什么你必须编写 self.foo = ...
如果你想调用定义为 def foo 的编写器方法=(值)
。 ||=
运算符毕竟只是一个奇特的赋值运算符。
在第二种情况下,没有赋值,所以当它命中 foo.nil?
时,Ruby 将裸词 foo
解释为方法调用,然后爆炸。
关于ruby - 关于方法中变量引用的简单 Ruby 难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12734258/