Ruby是否具有nil值的安全导航操作符的语法,比如Groovy?

在Groovy中,有一个很好的语法来处理null值。

例如,我可以做一个if语句:

if (obj1?.obj2?.value) { } 

即使obj1为null(它将评估为false),也不会抛出NullPointerException。

这是非常方便的,所以想知道我是否错过了Ruby等价物。

在rails应用程序中有Object#try

所以你可以做到

 obj1.try(:obj2).try(:value) 

或者用一个块(如下面的评论所述)

 obj.try {|obj| obj.value} 

UPDATE

在ruby 2.3中有运算符:

 obj&.value&.foo 

这与obj && obj.value && obj.value.foo

这已添加到Ruby 2.3中。

语法是obj1&.meth1&.meth2

Ruby 2.3将支持安全导航操作符:

 obj1&.obj2&.value 

https://www.ruby-lang.org/en/news/2015/11/11/ruby-2-3-0-preview1-released/

try是在Ruby 2.3之前执行此操作的唯一标准方法。 使用Ruby 2.3,您可以:

 if obj1&.obj2&.value end 

此外,如果您有哈希结构,则可以使用_. Hashie的运营商:

 require 'hashie' myhash = Hashie::Mash.new({foo: {bar: "blah" }}) myhash.foo.bar => "blah" myhash.foo? => true # use "underscore dot" for multi-level testing myhash.foo_.bar? => true myhash.foo_.huh_.what? => false