Ruby 为什么是Fixnum&&;Fixnum返回最后一个数字,是否为false?
我举了一个例子:Ruby 为什么是Fixnum&&;Fixnum返回最后一个数字,是否为false?,ruby,logical-operators,Ruby,Logical Operators,我举了一个例子: if 22 && 2 == 2 puts "true" else puts "false" end 在这段代码中,它看起来就像只使用数字2一样,并且它返回true,因为很明显2等于2。Ruby中唯一逻辑上为false的是nil和false。其他一切,如0、空字符串、空数组、空散列,在逻辑上都被认为是正确的。这意味着Ruby如何处理布尔运算符,如&&和|,因为它不需要强制将内容转换为像true或false这样的文本布尔值 因此,22&&2在逻辑上不可能是
if 22 && 2 == 2
puts "true"
else
puts "false"
end
在这段代码中,它看起来就像只使用数字2一样,并且它返回true,因为很明显2等于2。Ruby中唯一逻辑上为false的是nil
和false
。其他一切,如0
、空字符串、空数组、空散列,在逻辑上都被认为是正确的。这意味着Ruby如何处理布尔运算符,如&&
和|
,因为它不需要强制将内容转换为像true
或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
它的计算结果为
true
与JavaScript、Python和许多动态语言的计算结果相同。您在这里问什么?为什么您的表达式在任何语言中的计算结果都是false
?我知道没有哪种语言的&
会失败,这意味着22
或2==2
被转换为布尔false
。一个是非零数字,一个是布尔值true
。我原以为22&&2在比较这两个数字,但事实并非如此,我现在明白了,在阅读了塔德曼的回答后,你应该将@meagar的评论“你在问什么?”解释为“请编辑以陈述你的问题”这里没有22&&2
。这是22&&true
@meager啊,因为这似乎是正确的。