2012-01-23 57 views

回答

12

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) = falsetrue = false

+2

+1正確展開'a || = b' –

+0

謝謝這個傢伙:) http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488。 html –

+0

+1指向正確的來源。 – Waseem

3

在你有一個對象的第一種情況,和您使用其<<方法。

在第二種情況下,您有一個賦值,其中必須將右表達式分配給左側變量,而不是對象或表達式。

+0

+1以獲得簡潔的答案。 –

相關問題