1

IRBで遊んでいるとき、私はこれに出くわしました:

a = -1
b = 1
(a and b) > 0

返品true、ただし

(false and true) == true

戻りますfalse

最初のステートメントが を返すのはなぜtrueですか? 「つるはし」では、「両方のオペランドが true の場合にのみ trueand&&評価されます。最初のオペランドが true の場合にのみ、2 番目のオペランドが評価されます [...]」と読みました。

これは、最初のステートメントが返される必要があることを意味します。false

4

3 に答える 3

3

-1 も 1 も、Ruby の観点からは「真の」値です。それが理由です

-1 and 1 # => 1
false and true => false

最初のステートメントが false を返す必要があること

これをどこから入手したのかわかりません。OR演算子と混同していませんか?

a = -1
b = 1

a and b # => 1
(a and b) > 0 # => true

a && b # => 1
(a && b) > 0 # => true

a || b # => -1
(a || b) > 0 # => false
于 2013-03-07T09:25:14.663 に答える
3

なぜそれは偽でなければならないのですか?両方のオペランドabは false ではなく、nil でもない..

IIRC、Ruby では、false/nil 以外の値はすべてtrue と見なされます。ゼロでも。したがって0 and 0、真です。-1と1もきっと!

編集:ああ、私はあなたが何を意味するかを理解しました。最初の式-1 and 1は -1 を返す必要があるということですか? いいえ、それが OR の機能です。

-1 and 1   =>  1
-1 or 1    => -1

AND はすべてのオペランドを「真」の結果として評価し、1 つの項目が「偽」の場合にのみチェックを減らします。
OR はすべてのオペランドを「偽」の結果として評価し、1 つの項目が「真」の場合にのみチェックを減らします

于 2013-03-07T09:25:26.863 に答える
0

Ruby では、オブジェクトが false になるのは、false または nil の場合だけです。

>> !!nil # false
>> !!false # false
>> !!-1 # true

あなたの構文では、試してみると言いたいことが得られません

>> (1 and -1) > 0

trueまたはfalseを返すためandに使用する必要があるため、興味深いのは返される値です

>> (1 and -1) # -1
>> (-1 and 1) # 1

(b and a) > 0興味深いことに、 false が返されます

(1 and -1)and演算子はすべての条件を満たす必要があるため、-1 を返します。今日は私に何か問題があります。

于 2013-03-07T09:29:55.303 に答える