我不知道爲什麼爲什麼`(var || = true)= false`會引發語法錯誤?
(var ||= []) << 1
作品如預期,但
(var ||= true) = false
沒有。
任何人都可以解釋爲什麼它不工作,這是怎麼回事?
我不知道爲什麼爲什麼`(var || = true)= false`會引發語法錯誤?
(var ||= []) << 1
作品如預期,但
(var ||= true) = false
沒有。
任何人都可以解釋爲什麼它不工作,這是怎麼回事?
a ||= b
表現得像a || a = b
。
賦值返回賦值,即var = true
返回true
。
var ||= true
將評估爲作業var = true
,因爲var
在此處未定義。如果定義了var
且其值爲true
,則返回值爲var
,即true
;如果它是假的,它將返回true
的值,即true
。
var ||= []
返回[]
,您的第一個表達式評估爲[] << 1
,這是合法的。
但是,您的第二個表達式計算結果爲true = false
,這會引發編譯錯誤。
TL;博士
(var ||= []) << 1
⟺(var = []) << 1
⟺[] << 1
✔
(var ||= true) = false
⟺(var = true) = false
⟺true = false
✘
在你有一個對象的第一種情況,和您使用其<<
方法。
在第二種情況下,您有一個賦值,其中必須將右表達式分配給左側變量,而不是對象或表達式。
+1以獲得簡潔的答案。 –
+1正確展開'a || = b' –
謝謝這個傢伙:) http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488。 html –
+1指向正確的來源。 – Waseem