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

Jea*_*ash 22 ruby null operators

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

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

if (obj1?.obj2?.value) {

}
Run Code Online (Sandbox Code Playgroud)

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

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

Ism*_*reu 23

在rails应用程序中有 Object#try

所以你可以做到

obj1.try(:obj2).try(:value)
Run Code Online (Sandbox Code Playgroud)

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

obj.try {|obj| obj.value}
Run Code Online (Sandbox Code Playgroud)

UPDATE

在ruby 2.3中有运算符:

obj&.value&.foo
Run Code Online (Sandbox Code Playgroud)

哪个是一样的 obj && obj.value && obj.value.foo

  • 或者:`obj.try {| obj | obj.value}` - 块模式经常使视觉上更有意义恕我直言. (3认同)
  • 请注意,[`Object#try`](http://api.rubyonrails.org/classes/Object.html#method-i-try)是[ActiveSupport]的一部分(https://github.com/rails/rails/tree/master/activesupport)gem,也可以在Rails之外使用. (2认同)

jer*_*ink 6

这已被添加到Ruby 2.3中.

语法是obj1&.meth1&.meth2.