【发布时间】:2013-03-22 10:28:03
【问题描述】:
从this SO answer,我可以动态创建嵌套的哈希值:
hash = Hash.new{ |h,k| h[k] = Hash.new(&h.default_proc) }
例如:
hash = Hash.new{ |h,k| h[k] = Hash.new(&h.default_proc) }
hash['a']['b']['c'] = { 'key' => 'value' }
#=> {'a' => { 'b' => { 'c' => { 'key' => 'value' }}}}
到目前为止一切顺利。
我需要这个:
hash = Hash.new{ |h,k| h[k] = Hash.new(&h.default_proc) }
hash['a', 'b', 'c'] = { 'key' => 'value' }
#=> {'a' => { 'b' => { 'c' => { 'key' => 'value' }}}}
我希望它保留层次结构中存在的任何其他哈希值,并根据需要创建新的哈希。
我对 ruby 中的元编程相当陌生,非常感谢您的帮助。
【问题讨论】:
-
“我希望它保留层次结构中存在的任何其他哈希值”是什么意思?
-
Hash#[](元素引用)方法的元数为 1。也就是说,它只接受一个参数,并且不能像你写的那样接受多个参数:hash['a', 'b', 'c'] = ...。如果你传入一个数组,就像hash[['a', 'b', 'c']] = ...那样,那么默认值块将不会被调用,因为你没有引用一个不存在的键,你直接使用给定键['a', 'b', 'c']分配一个值,这只是恰好是一个数组。 -
AlistairIsrael - 我如何使用 ['a', 'b', 'c'] 作为哈希 ['a']['b']['c']?那将解决我的问题。我需要一种以编程方式执行此操作的方法。
标签: ruby-on-rails ruby