只需多次初始化子元素即可。我的意思是:
@parent = Hash.new{ |h,k| h[k] = Hash.new(&h.default_proc) }
如果我尝试创建另一个多维节点,我尝试编码:
@parent[:child][some_field] = "Some example data..."
我总是收到这个错误:
undefined method `[]=' for nil:NilClass (NoMethodError)
你有什么想法如何解决这个问题?
答案 0 :(得分:3)
我需要更多的嵌套哈希,为什么不定义自己的类?
class NestedHash < Hash
def initialize
super { |h,k| h[k] = Hash.new(&h.default_proc) }
end
end
h = NestedHash.new
h[:foo][:bar] = :baz
h[:foo][:bar] #=> :baz
答案 1 :(得分:2)
与spickermann的答案有些相似,但有点不同。
class MyHash < Hash
def initialize
self.default_proc = proc{|h, k| h[k] = MyHash.new}
end
end
@parent = MyHash.new
请注意,不需要将参数/块传递给MyHash.new
,因为设置不同的默认值会使使用MyHash
的目的失效,而Hash
更适合这种情况