如何在ruby中动态设置嵌套哈希?

如何在ruby中动态设置嵌套哈希?,ruby,hash,nested,Ruby,Hash,Nested,假设我有一个嵌套哈希: h = { 'one' => {'two' => {'three' => 'a'} } } 我可以这样改变它: h['one']['two']['three'] = 'b' 如何更改以变量作为键的嵌套值 假设我有以下变量: key = "one.two.three" 要动态访问它,我使用以下方法: key.split('.').inject(h,:[]) 但当然,这样设置是行不通的

假设我有一个嵌套哈希:

h = { 'one' =>
        {'two' =>
            {'three' => 'a'}
        }
     }
我可以这样改变它:

h['one']['two']['three'] = 'b'
如何更改以变量作为键的嵌套值

假设我有以下变量:

key = "one.two.three"
要动态访问它,我使用以下方法:

key.split('.').inject(h,:[])
但当然,这样设置是行不通的:

key.split('.').inject(h,:[]) = 'b' # fails
那么,如何动态设置嵌套哈希的值呢?

hash#[]=
是一个单一的方法。您不能一直对最后一个键执行
哈希运算#[]
,而对其执行
=
。相反,请省略最后一个键,并在其上单独执行
Hash#[]=

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

我理解。很好的解释。