当前位置:  开发笔记 > 后端 > 正文

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

如何解决《安全导航操作员(&.)为零》经验,为你挑选了2个好方法。

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

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

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



1> mwp..:

foo&.bar是简写foo && foo.bar,所以你期望表达式的结果nil && nil.nil?是什么?


实际上,它并不完全是`foo && foo.bar`.它确实是`(foo == nil)?nil:foo.bar`,即它只检查方法接收器是否为"nil".当`foo`为'false`时,这是相关的.

2> Oeste..:

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

(nil && x).nil?true对于任何值,总是评估x.

虽然语法有力量,但这个特定情况有可能成为开发人员的"陷阱":

(stuff&.things).nil?=>这会产生true如果东西不存在或stuff.things返回nil.

与下面的案例:

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

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


为了避免陷阱,避免使用`&.nil?`,因为你总是"安全"地调用`#nil?`.做`stuff&.things.nil?`而不是.
推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有