安全导航操作员(&。)为零

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

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

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

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

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

(nil && x).nil? 对于x任何值,始终求值为true

虽然语法很有用,但这个特定情况有可能成为开发人员的“陷阱”:

(stuff&.things).nil? =>如果东西不存在,则生成true ,或者stuff.things返回nil

与下面的案例:

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

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