在Ruby中,为什么以下行是真的?
0 && 1 == 1
1 && 0 == 0
为什么它们不同而且不是0?
答案 0 :(得分:37)
Boolean AND运算符&&
返回第二个操作数,如果first不是false。 Ruby中的布尔表达式中0
和1
为true
。布尔表达式中只有nil
和false
为false。
nil && 15 # => nil
15 && 17 # => 17
15 && nil # => nil
答案 1 :(得分:7)
0
和1
不代表Ruby中的真值。在ruby中,任何不是nil
或false
的东西都是真的。如果你加上这个:
&和&&运营商评估他们的第一个操作数如果为false,则表达式返回false;否则,表达式返回第二个操作数的值。
您得到的是评估true && true
,然后返回第二个操作数的结果。如果你写了3 && 4
,你就会得到4
!
答案 2 :(得分:3)
除了这里的优秀答案:
您可能会混淆逻辑和按位 AND。
$ irb
1.9.3-p125 :001 > 1 & 0
=> 0
1.9.3-p125 :002 > 0 & 1
=> 0