Подтвердить что ты не робот

Имеет ли Ruby синтаксис для безопасного навигатора с нулевыми значениями, например, в Groovy?

В Groovy имеется хороший синтаксис для работы с нулевыми значениями.

Например, я могу сделать оператор if:

if (obj1?.obj2?.value) {

}

Это не вызовет исключение NullPointerException, даже если obj1 имеет значение null (он будет оцениваться как false).

Это то, что очень удобно, поэтому интересно, есть ли эквивалент Ruby, который я пропустил.

4b9b3361

Ответ 1

В приложении rails есть Object#try

Итак, вы можете сделать

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

или с блоком (как указано в комментариях ниже)

obj.try {|obj| obj.value}

UPDATE

В рубине 2.3 есть оператор для этого:

obj&.value&.foo

То же, что и obj && obj.value && obj.value.foo

Ответ 4

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