为什么在Ruby中0 && 1为1,而1 && 0为0?

24

在 Ruby 中,为什么下面的代码是成立的?

0 && 1 == 1
1 && 0 == 0
为什么它们不同,而且两个都不是0呢?
3个回答

37

Boolean AND操作符&&如果第一个操作数不为假,返回第二个操作数。01在Ruby布尔表达式中被视为true。只有nilfalse在布尔表达式中被视为假。

nil && 15 # => nil
15 && 17 # => 17
15 && nil # => nil

7

01在Ruby中不代表真值。在Ruby中,任何不是nilfalse的内容都是真的。如果再加上:

&& 运算符会评估它的第一个操作数。如果是false,该表达式返回false;否则,该表达式将返回第二个操作数的值。

这就意味着你可以计算true && true,然后返回第二个操作数的结果。如果你写了3 && 4,那么你会得到4


3

除了这里提供的优秀答案:

你可能混淆了逻辑按位与。

$ irb
1.9.3-p125 :001 > 1 & 0
 => 0 
1.9.3-p125 :002 > 0 & 1
 => 0 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接