Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么是Fixnum&&;Fixnum返回最后一个数字,是否为false?_Ruby_Logical Operators - Fatal编程技术网

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啊,因为这似乎是正确的。