今日私は仕事のスペックでこのようなものを見つけました。 paramが"true"
(String)かtrue
(TrueClass)のいずれかであるかどうかをサービスが確認していました。それは私には正当に見えましたが、提供されたparam値がORの最初の要素と同じであると評価されただけでした。Rubyの等価チェックがOR式でこのように動作するのはなぜですか?
以下の簡単な例:
5 == (5 || 6)
がtrue
5 == (6 || 5)
に評価はfalse
なぜに評価しますか?
今日私は仕事のスペックでこのようなものを見つけました。 paramが"true"
(String)かtrue
(TrueClass)のいずれかであるかどうかをサービスが確認していました。それは私には正当に見えましたが、提供されたparam値がORの最初の要素と同じであると評価されただけでした。Rubyの等価チェックがOR式でこのように動作するのはなぜですか?
以下の簡単な例:
5 == (5 || 6)
がtrue
5 == (6 || 5)
に評価はfalse
なぜに評価しますか?
(6 || 5)
ので戻っ6(||
は最初の真の条件を返す)、ない5:
[2] pry(main)> (6 || 5)
# => 6
ので5 == (6 || 5)
は、当然のことながら、虚偽である5 == 6
としてちょうど同じです。
ありがとう、私は今や馬鹿です。私はコードを自分で書いていたのですが、これを見つけたでしょうが、すでにそこにあることがわかりました。乾杯! –
nil
とfalse
を除くすべてがRubyで真実です。
5 == (6 || 5)
# => false
あなたが実際に
[5, 6].include? 5
# => true
ありがとう!私は今それを見る。愚かな間違い。乾杯! –
これは「短絡」として知られているを書くことを意味:だから他の人が言及したように、
5 || 6
はちょうど5私があるとしています。 '5 || 6 'は 'if 5 then 5 else 6 end'と同じです –