2017-03-31 2 views
0

今日私は仕事のスペックでこのようなものを見つけました。 paramが"true"(String)かtrue(TrueClass)のいずれかであるかどうかをサービスが確認していました。それは私には正当に見えましたが、提供されたparam値がORの最初の要素と同じであると評価されただけでした。Rubyの等価チェックがOR式でこのように動作するのはなぜですか?

以下の簡単な例:

5 == (5 || 6)true

5 == (6 || 5)に評価はfalse

なぜに評価しますか?

+0

これは「短絡」として知られているを書くことを意味:だから他の人が言及したように、5 || 6はちょうど5

私があるとしています。 '5 || 6 'は 'if 5 then 5 else 6 end'と同じです –

答えて

1

(6 || 5)ので戻っ6(||は最初の真の条件を返す)、ない5:

[2] pry(main)> (6 || 5) 
# => 6 

ので5 == (6 || 5)は、当然のことながら、虚偽である5 == 6としてちょうど同じです。

+0

ありがとう、私は今や馬鹿です。私はコードを自分で書いていたのですが、これを見つけたでしょうが、すでにそこにあることがわかりました。乾杯! –

0

nilfalseを除くすべてがRubyで真実です。

5 == (6 || 5) 
# => false 

あなたが実際に

[5, 6].include? 5 
# => true 
+0

ありがとう!私は今それを見る。愚かな間違い。乾杯! –

関連する問題