在 Ruby 中,为什么下面的代码是成立的?
0 && 1 == 1
1 && 0 == 0
为什么它们不同,而且两个都不是0呢?Boolean AND操作符&&
如果第一个操作数不为假,返回第二个操作数。0
和1
在Ruby布尔表达式中被视为true
。只有nil
和false
在布尔表达式中被视为假。
nil && 15 # => nil
15 && 17 # => 17
15 && nil # => nil
0
和1
在Ruby中不代表真值。在Ruby中,任何不是nil
或false
的内容都是真的。如果再加上:
&& 运算符会评估它的第一个操作数。如果是false,该表达式返回false;否则,该表达式将返回第二个操作数的值。
这就意味着你可以计算true && true
,然后返回第二个操作数的结果。如果你写了3 && 4
,那么你会得到4
!
除了这里提供的优秀答案:
你可能混淆了逻辑和按位与。
$ irb
1.9.3-p125 :001 > 1 & 0
=> 0
1.9.3-p125 :002 > 0 & 1
=> 0