Вы можете использовать оператор безопасной навигации &.
(представлен в Ruby 2.3).
some_variable&.some_method
# is equivalent to
some_variable.nil? ? nil : some_variable.some_method
# or
some_variable.some_method unless some_variable.nil?
Поскольку оба Array # dig и Hash # dig возвращают nil
, если какой-либо промежуточный шаг равен nil
, это должно удовлетворить ваши требования. Пропуск вызова map , если полученное значение равно nil
.
the_data
.dig('foo', 'bar', 0, 'baz', 'fuzz')
&.map ...
Другой вариант - сохранить данные в переменной и использовать оператор , если .
if fuzz = the_data.dig('foo', 'bar', 0, 'baz', 'fuzz')
fuzz.map ...
end
Или, если вы работаете в методе и не можете продолжить работу без значения, вы можете добавить защиту, которая возвращает метод, если значение отсутствует.
##
# Does something.
#
# @param the_data [Hash] a JSON object that ...
# @return [Array<Object>, nil] an array containing ...
# or nil if the JSON object doesn't has the correct structure
def some_method(the_data)
fuzz = the_data.dig('foo', 'bar', 0, 'baz', 'fuzz') or return
fuzz.map ...
end