我已經看到了這句法在Ruby中:Ruby或||語法與對象
x = ary['value'] || Value.new
我得到這個角色,如果離開的側||是錯誤的,那麼右側將被執行。但我不明白的一部分:
false || (object) becomes (object)
我想||應該解析爲布爾值。至少在大多數其他語言中。爲什麼Ruby解析爲一個對象。
另一個類似的問題,我也有:
'test' || true
=> "test"
如何「測試」得到評估爲真?
我已經看到了這句法在Ruby中:Ruby或||語法與對象
x = ary['value'] || Value.new
我得到這個角色,如果離開的側||是錯誤的,那麼右側將被執行。但我不明白的一部分:
false || (object) becomes (object)
我想||應該解析爲布爾值。至少在大多數其他語言中。爲什麼Ruby解析爲一個對象。
另一個類似的問題,我也有:
'test' || true
=> "test"
如何「測試」得到評估爲真?
在紅寶石nil
和false
總是隻能計算到false
。請看下面:
p a = nil || 2 #=> 2
p a = false || 2 #=> 2
p nil || false || 2 #=> 2
p '' || 2 #=> ""
更多參考看看這裏True, False And Nil Objects In Ruby
和Ruby short circuit "or" explanation
在Ruby中,有四種情況:
假的就是假
真實不虛
無是假-y
還有什麼是真理-Y
所以,
5 && 8 #=> 8
5 || false #=> 5
false || 5 #=> 5
(5 && 8) == true #=> false
!!(5 && 8) == true #=> true
!!(false || nil) == false #=> true
拇指布爾評價 Ruby中重要原則是,只有對象NilClass
和FalseClass
作爲虛假評估。任何其他對象,包括String
,都被評估爲true,即使它是空的。
在Ruby中,和大多數編程語言一樣,一些值是truthy,而另一些值是錯誤的。出於布爾評估目的,truthy值爲true
,同樣虛假值爲false
。
然而,truthy值實際上沒有投射到true
和falsey並不投射到false
,它可以讓布爾表達式評估爲一些有益的,而不是平的true
或false
。
nil
和false
是Ruby中唯一錯誤的值。請注意0是truthy,與大多數其他語言不同。
有關更多詳細信息,請參見https://gist.github.com/jfarmer/2647362。
這叫做short-circuiting。
通過與操作者||
接合在一起其他表達式將是短路,這意味着它形成的任何表述「停止」在第一truthy表達。
所以考慮這個例子:
nil || Value.new
Ruby解釋着眼於nil
第一;那麼,既然這不是真理,它就會轉向下一個表達式。
現在考慮你的問題的最後例子:
"test" || true
紅寶石看"test"
第一;因爲這是真理,評估在那裏停止。
&&
運營商也是如此,它基本上是相同的短路邏輯,但只有當它發現一個僞造的表達式時才停止。
藉此例如:
person && person.name
如果person
是nil
,則上述表達式會nil
,因爲這是第一falsey表達。
在另一方面:
person && person.male? && person.name
假設person
不是零,而是女性。然後(假設male?
返回false
)上述表達式將評估爲false
。
當然,如果沒有表達式是錯誤的,那麼&&
運算符只是給你最後一個(這通常是你想要的)。
p無false || 2 –