安全导航操作员(&amp ;.)为零

时间:2016-01-04 00:15:58

标签: ruby ruby-2.3 safe-navigation-operator

由于Ruby 2.3引入了安全导航操作符(&.),a.k.a孤独运算符,nil对象上的行为似乎很奇怪。

nil.nil?    # => true
nil&.nil?   # => nil

这样设计的行为方式是这样吗?或者在添加孤独运算符时滑落的边缘情况?

2 个答案:

答案 0 :(得分:32)

foo&.barfoo && foo.bar的简写,那么您期望表达式nil && nil.nil?的结果是什么?

答案 1 :(得分:7)

这是因为nil&.nil?nil && nil.nil?的简写。这将评估为nil && true,然后是nil

对于(nil && x).nil?的任何值,

true始终评估为x

虽然语法有力量,但这个具体案例有可能成为一个问题。对于开发者:

(stuff&.things).nil? =>如果内容不存在,则会生成true,或stuff.things返回nil

VS。以下案例:

stuff&.things&.nil? =>除了nil返回stuff.things之外的其他内容之外,每种情况都会生成nil,在这种情况下,它会返回false

由于普通布尔逻辑难以区分falsenil,因此在正常逻辑中这不太可能有意义。