Подтвердить что ты не робот

Как установить динамический хэш в рубине динамически?

Предположим, что у меня есть вложенный хеш:

h = { 'one' =>
        {'two' =>
            {'three' => 'a'}
        }
     }

Я могу изменить его следующим образом:

h['one']['two']['three'] = 'b'

Как изменить вложенное значение с переменной в качестве ключа?

Скажем, у меня есть следующая переменная:

key = "one.two.three"

Чтобы получить доступ к ней динамически, я использую следующее:

key.split('.').inject(h,:[])

Но, конечно, настройка этого типа не работает:

key.split('.').inject(h,:[]) = 'b' # fails

Итак, как я могу динамически установить значение вложенного хэша?

4b9b3361

Ответ 1

Hash#[]= - это единственный метод. Вы не можете сделать Hash#[] до последнего ключа и сделать =. Скорее, оставьте последний ключ и сделайте Hash#[]= индивидуально на нем.

*key, last = key.split(".")
key.inject(h, :fetch)[last] = "b"