2009-10-26 91 views
6

我的印象是||or是同義詞。或與||之間的區別當設置變量

設置變量or不具有價值;爲什麼?

>> test = nil or true 
=> true 
>> test 
=> nil 

>> test = false or true 
=> true 
>> test 
=> false 

Works的預期'與||

>> test = nil || true 
=> true 
>> test 
=> true 
+0

這對我來說是一個遺漏。 – 2009-10-27 02:16:31

回答

15

or具有較低的優先級=

test = nil or true 

相同

(test = nil) or true 

true,同時設定testnil

||具有比=更高的優先級。

test = nil || true 

相同

test = (nil || true) 

true,同時設定testtrue

+1

......這就是爲什麼我們不會寫這樣一段代碼,或者如果我們這樣做,我們總是會使用括號來清楚說明發生了什麼。 – mpen 2009-10-26 17:07:42

+0

謝謝,這很有道理。 – 2009-10-26 17:09:03

+2

不僅'''具有非常高和'或'非常低的優先級,而且'和'和'或'具有*相同*優先級,而'||'和'&&'具有不同的優先級。一般來說,在條件表達式中,總是使用運算符表單,因爲它們具有您實際期望它們具有的相對優先級。使用'and'和'or'僅用於控制流,其中您希望*內部表達式綁定更緊密。像'test = blah.get_records或puts'找不到記錄。''。 – 2009-10-29 13:34:53

1

and&&之間相同。我曾經被這個問題所困擾,然後我意識到儘管and&&更具可讀性,但這並不意味着它總是更合適。

>> f = true && false 
=> false 
>> f 
=> false 
>> f = true and false 
=> false 
>> f 
=> true 
>> 
相關問題