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