Ruby 假及&;零及零&&;红宝石中的假

Ruby 假及&;零及零&&;红宝石中的假,ruby,Ruby,为什么nil&&false返回nil,而false&&nil返回false 我把最上面的答案读了一遍。在我看来,nil和false都作为falsy值计算,但为什么这两个表达式返回不同的值?规则很简单:&&如果它是falsy,则返回它的第一个参数。否则,它将计算并返回其第二个参数 所以在 及 在这两种情况下,第一个论点都是错误的。(nil和false是计算falsy的唯一两个值),因此表达式的结果是第一个参数 第二个参数也恰好为false这一事实并不重要。事实上,第二个参数由于短路而未被计算。这是

为什么
nil&&false
返回
nil
,而
false&&nil
返回
false


我把最上面的答案读了一遍。在我看来,
nil
false
都作为falsy值计算,但为什么这两个表达式返回不同的值?

规则很简单:
&&
如果它是falsy,则返回它的第一个参数。否则,它将计算并返回其第二个参数

所以在

在这两种情况下,第一个论点都是错误的。(
nil
false
是计算falsy的唯一两个值),因此表达式的结果是第一个参数


第二个参数也恰好为false这一事实并不重要。事实上,第二个参数由于短路而未被计算。

这是关于操作顺序的。 Nil没有布尔值。 在&&语句中,当至少on参数为false时,它返回false

因此,在表达式中:
false&&nil
发现第一个参数为false,检查第二个参数没有意义,因此返回false。 在第二种情况下-
nil&&false它遇到nil,因此无法与布尔值比较的值,因此表达式无法计算,因此它返回“nil”,就像ruby中的其他类似情况一样

在“| |”语句中,当第一个或第二个参数为false时,它给出false

第一种情况:
false | | nil
-它检查第一个参数是否为false,然后验证第二个参数是否为空,从而给出第一个值


第二种情况
nil | | | false
它首先检查为nothing,然后第二种情况是boolean,因此它返回false。

试试这个:
false&&1.0/0 |=>false;nil&&1=>2}。quick_brown#=>nil
(其中没有定义方法
quick_brown |u fox
).Ruby返回第一个值,如果它是
false
nil
(逻辑上为false,“falsy”),并且不计算
&&
后面的表达式。后者尤其重要,因为通常编写表达式时,
&&
后面的部分只有在
&&
左边的部分逻辑上为true(“truthy”)时才是有效的Ruby语句。例如,
obj.is_a?(Hash)&&obj[:cat]
,其中
obj
可能是数组、整数或散列。“规范在4.2版本中失败,但不是4.1”-必须是其他东西。Ruby的评估策略没有改变,Rails没有也不能改变它。Ruby中的每个对象都有一个布尔值:
false
nil
都是false,所有其他对象都是truthy。
nil && false
false && nil