nodes = {
:node1 => {
:inherits => nil,
:variables => { :foo => 1, :bar => 2 }
},
:node2 => {
:inherits => :node1,
:variables => { :foo => 9, :baz => 4 }
}
}
我一直在尝试了解如何返回一个新的节点哈希,其中每个节点的 :variables 哈希与 :inheritance 中指定的节点的 :variables 合并。换句话说, node1 将保持原样,而 node2 以 :variabes => { :foo => 9, :bar => 2, :baz => 4 } 结束
我一直在浏览涉及 Enumerable#inject、Hash#merge 和块等的文档,并认为是时候寻求帮助了。
更新:
想我会提供更新。这段代码当然不是解决方案,但它可能正朝着正确的方向前进......
nodes = {
:node1 => { :inherits => nil, :variables => { :foo => 1, :bar => 2 } },
:node2 => { :inherits => :node1, :variables => { :foo => 9, :baz => 4 } }
}
new = nodes.inject({}) do |result, (k, v)|
result.merge k => v.merge({ :variables => { :a => 6, :b => 7 } })
end
返回
{:node2=>{:inherits=>:node1, :variables=>{:a=>6, :b=>7}}, :node1=>{:inherits=>nil, :variables=>{:a=>6, :b=>7}}}
所以 v.merge 没有按预期工作......