Я сомневаюсь, есть ли способ получить значение v без указания, например, [:a][:b][:v]?
v
[:a][:b][:v]
{a: {b: {v: 'x'}}}
Если вы не знаете ключей, но знаете, что у каждого вложенного хэша есть только один ключ:
def dig_values(h) if h.is_a? Hash dig_values(h[h.keys.first]) else return h end end dig_values(h) #=> "x"
Это рекурсивный метод (как вы можете видеть в телеон вызывает сам себя и использует следующие методы Ruby: Hash # keys , Object # is_a? и Enumerable # first .
Если у вас уже есть ключи, скажите
keys = [:a, :b, :v]
затем вы можете использовать dig(), чтобы получить значение как:
dig()
hash = {a: {b: {v: 'x'}}} hash.dig(*keys) #=> "x"