Получить значение из ха sh в ха sh в массиве в хеш - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь получить значение zap в га sh, которое выглядит следующим образом:

hash = {
         :foo => 1,
         :bar => [{
           :baz => 2,
           :zot => {
             :zap => 3
           }
         }]
       }

hash.dig прерывается, как только оно попадает в массив.

Если это важно, это шаг в операторе if/elsif/else для проверки различных сообщений об ошибках. (т.е. elsif zap == 3)

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Я считаю, что вы не правы, и dig фактически работает на любом объекте с помощью метода dig. Dig определяется как для массивов , так и для хэшей . Кроме того, если я определяю метод dig для пользовательского объекта:

o = Object.new

def o.dig(*args)
  puts args.inspect
  return :result
end

, то при вызове так:

{custom_object: o}.dig(:custom_object,1,2,3)
#-> output: [1,2,3]
#=> :result

вы можете видеть, что dig вызывается o с оставшиеся аргументы ([1,2,3]) и возвращает все, что возвращает пользовательский метод dig.

Возможно, вы пропустили то, что для массивов вам нужно использовать индекс Numberri c, иначе при вызове dig возникает ошибка типа он вызывается в массиве. Так что hash.dig(:bar, 0, :zot, :zap) это то, что вы, вероятно, хотите. (благодарю Алекса за то, что он избил меня до удара).

0 голосов
/ 10 марта 2020

Я бы сделал что-то вроде этого:

hash[:bar].first.dig(:zot, :zap)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...