为什么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 中 只有 逻辑上错误的是 nil
和 false
。其他所有内容,如 0
、空字符串、空数组、空哈希,它们 所有 都被认为在逻辑上为真。这对 Ruby 如何处理布尔运算符如 &&
和 ||
有影响,因为它不需要强制转换为文字布尔值,如 true
或 false
.
因此,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
。
我做了一个例子:
if 22 && 2 == 2
puts "true"
else
puts "false"
end
这段代码看起来和只使用数字 2 是一样的,而且它返回 true,因为显然 2 等于 2。
在 Ruby 中 只有 逻辑上错误的是 nil
和 false
。其他所有内容,如 0
、空字符串、空数组、空哈希,它们 所有 都被认为在逻辑上为真。这对 Ruby 如何处理布尔运算符如 &&
和 ||
有影响,因为它不需要强制转换为文字布尔值,如 true
或 false
.
因此,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
。