Ruby中的false && nil和nil && false是什么意思?

3

3
尝试这个:false && 1.0/0 #=> false; nil && { 1=>2 }.quick_brown_fox #=> nil(其中没有定义 quick_brown_fox 方法)。如果第一个值为“假”值(逻辑上的 false),例如 falsenil,Ruby 返回它;并且 不会 计算 && 后面的表达式。这一点尤其重要,因为通常你会写一个表达式,在 && 左边的部分是“真”值(逻辑上的 true,“truthy”)时,&& 右边的部分是一个有效的 Ruby 语句。例如:obj.is_a?(Hash) && obj[:cat],其中 obj 可能是一个数组、整数或哈希表。 - Cary Swoveland
“4.2版本中规格失败,但4.1版本没有” - 必须是其他原因。Ruby的评估策略没有改变,Rails不能也不会改变它。 - Stefan
2个回答

10
规则很简单:&&如果第一个参数为假,它将返回该参数。否则,它会计算并返回第二个参数。
所以在
nil && false
and
false && nil
在这两种情况下,第一个参数是"假值"(只有 nilfalse 会被视为假值),因此表达式的结果为第一个参数。第二个参数是否为false并不重要,事实上由于短路求值,第二个参数也不会被计算。

-1
这是关于操作顺序的问题。 Nil没有布尔值。 在 && 语句中,当至少有一个参数为 false 时,它返回 false。
因此,在表达式中: false && nil 它发现第一个参数是 false,检查第二个参数是无意义的,所以它返回 false。 在第二种情况下 - nil && false,它遇到了 nil,这个值不能与布尔值进行比较,因此表达式无法计算,所以它像 Ruby 中的每个类似情况一样返回 'nil'。
在 '||' 语句中,如果第一个或第二个参数为 false,则返回 false。
第一种情况:false || nil - 它检查第一个参数是 false,然后验证第二个参数,实际上什么也没有,所以它给出第一个值。
第二种情况 nil || false,它首先检查第一个参数是什么,然后检查第二个参数是布尔值,所以它返回 false。

1
在 Ruby 中,每个对象都有一个布尔值:falsenil 是 _falsey_,所有其他对象都是 _truthy_。 - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接