为什么Fixnum && Fixnum return最后一个数而不是false?

Why Fixnum && Fixnum return the last number and not false?

我做了一个例子:

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

这段代码看起来和只使用数字 2 是一样的,而且它返回 true,因为显然 2 等于 2。

在 Ruby 中 只有 逻辑上错误的是 nilfalse。其他所有内容,如 0、空字符串、空数组、空哈希,它们 所有 都被认为在逻辑上为真。这对 Ruby 如何处理布尔运算符如 &&|| 有影响,因为它不需要强制转换为文字布尔值,如 truefalse.

因此,22 && 2 不可能在逻辑上是错误的。 && 运算符的工作方式是 return 是打破或确认评估的最后一个元素:

1 && 2 && 3
# => 3
1 && false && 3
# => false
1 && 2 && nil
# => nil

&& 操作将 return false 的唯一方法是 false 是存在的两个术语之一。这可能像这样发生:

1 && !1
# => false

这是因为 !1 计算为 false

您可能习惯于某些语言,其中 && 的结果始终是布尔值,但这里不是这种情况。

更新:@meagar 在这里指出的是您的代码实际上是这样计算的:

22 && (2 == 2)

这当然等同于:

22 && true

计算结果为 true