2012-10-04 21 views

回答

4

在第一種情況下,foo ||= 1指局部變量。如果您想要調用定義爲def foo=(value)的寫入程序方法,那麼Ruby將始終創建一個本地變量,這就是爲什麼您必須編寫self.foo = ...。畢竟,||=運算符只是一個奇特的賦值運算符。

在第二種情況下,沒有賦值,所以當它遇到foo.nil?時,Ruby會將作爲方法調用的空白字foo解釋並炸掉。

+0

爲什麼在第一種情況下,而不是第二種? –

+0

好吧,我想這是因爲在第一種情況下,解釋器首先將|| =看作是一個賦值而不是條件nil?,這使得它被解釋爲局部變量而不是方法。 - 我看到你已經添加了相同的解釋。 –

+0

是的,就是這樣,我更新了我的答案。 [本網站](http://rubylearning.com/satishtalim/variables_and_assignment.html)對此進行了詳細解釋。 –

相關問題