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



我举了一个例子:

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

在此代码上,它看起来与仅使用数字 2 相同,并且返回 true,因为显然 2 等于 2。

Ruby 中唯一逻辑上错误的东西是nilfalse。其他所有内容,如0、空字符串、空数组、空哈希,它们被认为是逻辑上正确的。这对 Ruby 如何处理布尔运算符(如&&||)有影响,因为它不需要强制将事物转换为像truefalse这样的文字布尔值。

因此,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.

相关内容

  • 没有找到相关文章

最新更新