Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
为什么这个方法返回 1 而不是死于无限递归?
def foo foo ||= 1 end foo # => 1
重写了以下方式它确实死了:
def foo foo.nil? ? 1 : foo end
在第一种情况下,foo ||= 1指的是局部变量。当您对裸字进行赋值时,Ruby 总是会创建一个局部变量,这就是为什么self.foo = ...如果您想调用定义为def foo=(value). ||=毕竟,运算符只是一个花哨的赋值运算符。
foo ||= 1
self.foo = ...
def foo=(value)
||=
在第二种情况下,没有赋值,所以当它命中时foo.nil?,Ruby 将裸词解释foo为方法调用,然后就崩溃了。
foo.nil?
foo