我举了一个例子:
if 22 && 2 == 2
puts "true"
else
puts "false"
end
在此代码上,它看起来与仅使用数字 2 相同,并且返回 true,因为显然 2 等于 2。
Ruby 中唯一逻辑上错误的东西是nil
和false
。其他所有内容,如0
、空字符串、空数组、空哈希,它们都被认为是逻辑上正确的。这对 Ruby 如何处理布尔运算符(如&&
和||
)有影响,因为它不需要强制将事物转换为像true
或false
这样的文字布尔值。
因此,22 && 2
在逻辑上不可能是错误的。&&
运算符的工作方式是返回最后一个元素以中断或确认计算:
1 && 2 && 3
# => 3
1 && false && 3
# => false
1 && 2 && nil
# => nil
&&
操作返回false
的唯一方法是false
是存在的两个术语之一。这可能像这样发生:
1 && !1
# => false
这是因为!1
评价为false
。
您可能习惯于某些语言,其中&&
的结果始终是布尔值,但这里的情况并非如此。
更新:@meagar在这里指出的是,您的代码实际上是这样评估的:
22 && (2 == 2)
这当然相当于:
22 && true
其计算结果为true
.