1
爲什麼此方法返回1而不是從無限遞歸中死亡?方法中變量引用的簡單Ruby拼圖
def foo
foo ||= 1
end
foo # => 1
改寫如下方式它死:
def foo
foo.nil? ? 1 : foo
end
爲什麼此方法返回1而不是從無限遞歸中死亡?方法中變量引用的簡單Ruby拼圖
def foo
foo ||= 1
end
foo # => 1
改寫如下方式它死:
def foo
foo.nil? ? 1 : foo
end
在第一種情況下,foo ||= 1
指局部變量。如果您想要調用定義爲def foo=(value)
的寫入程序方法,那麼Ruby將始終創建一個本地變量,這就是爲什麼您必須編寫self.foo = ...
。畢竟,||=
運算符只是一個奇特的賦值運算符。
在第二種情況下,沒有賦值,所以當它遇到foo.nil?
時,Ruby會將作爲方法調用的空白字foo
解釋並炸掉。
爲什麼在第一種情況下,而不是第二種? –
好吧,我想這是因爲在第一種情況下,解釋器首先將|| =看作是一個賦值而不是條件nil?,這使得它被解釋爲局部變量而不是方法。 - 我看到你已經添加了相同的解釋。 –
是的,就是這樣,我更新了我的答案。 [本網站](http://rubylearning.com/satishtalim/variables_and_assignment.html)對此進行了詳細解釋。 –