加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么Ruby使用自己的语法来安全导航操作符?

发布时间:2020-12-16 22:57:05 所属栏目:百科 来源:网络整理
导读:Ruby 2.3.0引入了安全的导航语法,通过引入一个仅在前一个语句的值不为nil时调用该方法的新运算符,简化了链式方法调用的零处理.这是一个已经存在的功能,例如在C#,Groovy和Swift中.例如 in Groovy,语法是 foo?.bar 这基本上意味着结果值是foo.bar的结果值,除非
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提供)但后来被丢弃,因为它被认为太接近其他语言引入的原始语法(如前所述,这是不可行的).最后的语法&amp ;.被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 of u && u.profile.

But behavior of &. should be kept,i.e. it should skip nil but recognize false.

此语法随后作为Ruby 2.3.0-preview1的一部分发布.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读