Как установить динамический хэш в рубине динамически?
Предположим, что у меня есть вложенный хеш:
h = { 'one' =>
{'two' =>
{'three' => 'a'}
}
}
Я могу изменить его следующим образом:
h['one']['two']['three'] = 'b'
Как изменить вложенное значение с переменной в качестве ключа?
Скажем, у меня есть следующая переменная:
key = "one.two.three"
Чтобы получить доступ к ней динамически, я использую следующее:
key.split('.').inject(h,:[])
Но, конечно, настройка этого типа не работает:
key.split('.').inject(h,:[]) = 'b' # fails
Итак, как я могу динамически установить значение вложенного хэша?
Ответы
Ответ 1
Hash#[]=
- это единственный метод. Вы не можете сделать Hash#[]
до последнего ключа и сделать =
. Скорее, оставьте последний ключ и сделайте Hash#[]=
индивидуально на нем.
*key, last = key.split(".")
key.inject(h, :fetch)[last] = "b"