我做了一个例子:
if 22 && 2 == 2
puts "true"
else
puts "false"
end
这个代码看起来就像只使用数字2一样,它返回true,因为显然2等于2.
答案 0 :(得分:1)
Ruby中唯一的事物在逻辑上是假的nil
和false
。其他所有内容,例如0
,空字符串,空数组,空哈希,以及所有在逻辑上都是真的。这会影响Ruby如何处理像&&
和||
这样的布尔运算符,因为它不需要强制转换为像true
或{{1}这样的文字布尔值。 }。
因此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
。