AND運算符返回第二個值時,第一個是真實的,第一個當它是假紅寶石爲什麼0 || 1是0
1 && 2 ---> 2
0 && 1 ---> 0
爲什麼還是操作不返回第二個值時,第一個是假的,但返回第一個時,它的true
0 || 1 ---> 0
1 || 0 ---> 1
AND運算符返回第二個值時,第一個是真實的,第一個當它是假紅寶石爲什麼0 || 1是0
1 && 2 ---> 2
0 && 1 ---> 0
爲什麼還是操作不返回第二個值時,第一個是假的,但返回第一個時,它的true
0 || 1 ---> 0
1 || 0 ---> 1
紅寶石只計算,因爲它需要在這樣一個表達儘可能多的,然後停止,你看到返回的是剛剛過去的部分它評估的表達。 因此,對於你的& &的情況,它總是必須運行到最後,以防止後面的子句返回false並導致AND爲假。
而實際上你的例子是錯誤的:
irb> 0 && 1
=> 1
因爲0其中,預計是在Ruby中truthy,還不如假像C.
對於OR情況下,能夠儘快停止它會觸及任何有趣的事物,並且不需要打擾其他事物。
0 || false # => 0
false || 0 # => 0
false || 0 || 2 # => 0
如果要強制這樣的表達式爲布爾你這是怎麼經常看到它做:
!!(expression)
!!(0 || 1) => true
!!(nil || false) => false
||是一個邏輯運算符,不是一個按位運算符。與例如C的其他語言不同,在ruby中,0不是「虛假」的值。
因爲||是一個短路邏輯運算符,您有以下等效語句:
定義值「0」||定義的值 「1」
哪紅寶石被正確地評價爲truthy表達式A || truthy表達乙和返回truthy表達式A即0
在這裏看到:https://gist.github.com/jfarmer/2647362
爲 「Truthy」,並在Python和Ruby 「Falsey」 值的很好的概述。
有兩件事情在這裏發生了:
0
是truthy(這意味着它是評估在布爾上下文是真的)。||
)快捷方式,如果它是truthy,則返回左邊的參數。把這兩個在一起,你會得到0 || 1
返回0
'0 && 1'回報'1',不'0' – Stefan