22

Groovyには、null値を操作するための優れた構文があります。

たとえば、ifステートメントを実行できます。

if (obj1?.obj2?.value) {

}

これにより、obj1がnullの場合でもNullPointerExceptionがスローされません(falseと評価されます)。

これは非常に便利なものなので、私が見逃した同等のRubyがあるかどうか疑問に思います。

4

4 に答える 4

24

RailsアプリにはObject#try

だからあなたはすることができます

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

またはブロック付き(以下のコメントで述べたように)

obj.try {|obj| obj.value}

アップデート

ruby 2.3には、このための演算子があります。

obj&.value&.foo

これはと同じですobj && obj.value && obj.value.foo

于 2012-06-22T21:11:29.060 に答える
6

これはRuby2.3に追加されました。

構文はobj1&.meth1&.meth2です。

于 2015-10-23T16:55:19.023 に答える
3

Ruby 2.3は、安全なナビゲーション演算子をサポートします。

obj1&.obj2&.value

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

于 2015-11-13T11:33:32.083 に答える
2

tryRuby 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
于 2013-12-18T19:05:10.250 に答える