Я считаю, что вы не правы, и 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)
это то, что вы, вероятно, хотите. (благодарю Алекса за то, что он избил меня до удара).