为什么Ruby使用自己的语法来安全导航运算符?
Ruby 2.3.0引入了安全导航语法,通过引入一个只在前一个语句的值不为零时才调用该方法的新运算符来简化链处理方法调用的零处理。 这是一个在C#,Groovy和Swift中已经存在的功能。 例如在Groovy中,语法是
foo?.bar
这基本上意味着结果值是foo.bar的结果值,除非foo为null,在这种情况下,返回值也是null,因此不会引发异常。 此外,C#(称为空条件运算符)和Swift(称为可选链表达式)使用此表示法。
所以这个语法在其他语言中似乎是相当标准的。 现在,为什么在Ruby中的语法是
foo&.bar
代替?
这个答案基于Ruby的问题跟踪中对功能请求的讨论。 据Ruby的作者松本幸弘介绍,运营商是不可能的?.
在Ruby中,因为foo?
是有效的方法名称,因此无法解析。 运营商的第一个候选人是颠倒序列.?
。 该语法已经实现(由Nobuyoshi Nakada提供),但后来被废弃,因为它被认为与其他语言引入的原始语法太接近了(如前所述,这是不可行的)。 最后的语法&.
被松本建议接受。
这是松本给出的这种语法的理由
我想了一会儿,想着介绍&.
而不是.?
,因为:
.?
与?.
相似?.
在Swift和其他语言中,但反正是不同的。 ?
是Ruby中方法名称的有效后缀,我们在程序中已经看到很多问号。 u&.profile
提醒我们简短形式的u && u.profile
。 但是&.
行为&.
应该保留,即它应该跳过nil
但承认false
。
此语法随后作为Ruby 2.3.0-preview1的一部分发布。
链接地址: http://www.djcxy.com/p/79173.html上一篇: Why does Ruby use its own syntax for safe navigation operator?