Ruby 2.3.0引入了安全的导航语法,通过引入一个仅在前一个语句的值不为nil时调用该方法的新运算符,简化了链式方法调用的零处理.这是一个已经存在的功能,例如在C#,Groovy和Swift中.例如
in Groovy,语法是
foo?.bar
这基本上意味着结果值是foo.bar的结果值,除非foo为null,在这种情况下返回值也为null,因此不会抛出异常.此外,C#(称为空条件运算符)和Swift(称为可选链接表达式)使用此表示法.
所以语法似乎在其他语言中非常标准.现在,为什么在Ruby中使用语法
foo&.bar
代替?
解决方法
这个答案基于Ruby的问题跟踪中的
the discussion of the feature request.根据
Ruby’s author Yukihiro Matsumoto,不可能引入操作符?在Ruby中因为foo?是有效的方法名称,因此无法解析.运算符的第一个候选者是反向序列.该语法是
already implemented(由Nobuyoshi Nakada提供)但后来被丢弃,因为它被认为太接近其他语言引入的原始语法(如前所述,这是不可行的).最后的语法& ;.被Matsumoto接受为
suggested.
以下是Matsumoto给出的这种语法的理由
I think about this for a while,and thinking of introducing
&.
instead of.?
,because:
.?
is similar to?.
in Swift and other languages,but is different anyway.- Since
?
is a valid suffix of method names in Ruby,we already see a lot of question marks in our programs.u&.profile
reminds us as short form ofu && u.profile
.But behavior of
&.
should be kept,i.e. it should skipnil
but recognizefalse
.
此语法随后作为Ruby 2.3.0-preview1的一部分发布.
原文地址:https://www.jb51.cc/ruby/265409.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。