为什么Fixnum&& Fixnum返回最后一个数字而不是假?

时间:2017-04-26 23:05:29

标签: ruby logical-operators

我做了一个例子:

if 22 && 2 == 2
  puts "true"
else
  puts "false"
end

这个代码看起来就像只使用数字2一样,它返回true,因为显然2等于2.

1 个答案:

答案 0 :(得分:1)

Ruby中唯一的事物在逻辑上是假的nilfalse。其他所有内容,例如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