1

私はRubyでこの構文を見てきました:

x = ary['value'] || Value.new

|| の左側の部分を取得します。が false の場合、右側が実行されます。しかし、次の部分がわかりません。

false || (object) becomes (object)

|| 思った || ブール値に解決する必要があります。少なくとも他のほとんどの言語では。Ruby がオブジェクトに解決されるのはなぜですか。

私も持っている別の同様の質問:

'test' || true
=> "test"

「テスト」はどのように真と評価されますか?

4

5 に答える 5

1

In Ruby, you have four cases:

False is false

True is true

Nil is false-y

Anything else is truth-y

So,

5 && 8 #=> 8
5 || false #=> 5
false || 5 #=> 5
(5 && 8) == true #=> false
!!(5 && 8) == true #=> true
!!(false || nil) == false #=> true
于 2013-04-16T18:42:28.353 に答える
1

Ruby でのブール値評価の大まかな経験則は、オブジェクトとオブジェクトのみがfalseとしてNilClass評価FalseClassされるということです。を含むその他のオブジェクトは、String空であっても true と評価されます。

于 2013-04-16T18:43:24.563 に答える
1

これを短絡と呼びます。

他の式を||演算子で結合して形成された式は、短絡されます。つまり、最初のの式で「停止」します。

したがって、次の例を検討してください。

nil || Value.new

Ruby インタープリターはnil最初に調べます。それは真実ではないので、次の式に進みます。

質問の最後にある例を考えてみましょう。

"test" || true

ルビーは"test"最初に見ます。それは真実なので、評価はそこで止まります。

同じことが&&演算子にも当てはまります。これは本質的に同じ短絡ロジックですが、誤った式が見つかった場合にのみ停止します。

次の例を見てください。

person && person.name

personがである場合nil、上記の式は に評価されnilます。これが最初の falsey 式であるためです。

一方で:

person && person.male? && person.name

nilpersonではなく、女性であるとします。male?次に (が返されたと仮定してfalse) 上記の式は に評価されfalseます。

そしてもちろん、偽の式がない場合、&&演算子は最後のものを返します (通常はこれが必要です)。

于 2013-04-16T18:48:53.700 に答える