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 が意図したとおりに機能しないように...