Groovyには、null値を操作するための優れた構文があります。
たとえば、ifステートメントを実行できます。
if (obj1?.obj2?.value) {
}
これにより、obj1がnullの場合でもNullPointerExceptionがスローされません(falseと評価されます)。
これは非常に便利なものなので、私が見逃した同等のRubyがあるかどうか疑問に思います。
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
構文は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