nodes = {
:node1 => {
:inherits => nil,
:variables => { :foo => 1, :bar => 2 }
},
:node2 => {
:inherits => :node1,
:variables => { :foo => 9, :baz => 4 }
}
}
我一直在試圖理解如何返回一個新的節點哈希,其中每個節點的變量哈希都與:inheritance中指定的節點中的變量合併在一起。換句話說,node1會保持原樣,而node2最後會以:variabes => {:foo => 9,:bar => 2,:baz => 4}在哈希中合併值
我一直在游泳文檔涉及Enumerable#inject,Hash#與塊合併,等等,現在是時候請求幫助了。
更新:
我想提供一個更新。此代碼是肯定不是解決辦法,但它可能會在正確的方向上走向...
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是不工作...
這似乎很好地工作。謝謝。 – user1727142
繼續深入研究並提出以下建議: 'new = nodes.inject({})do | result,(name,node)| vars = node [:inherits] .nil? ?節點[:variables]:節點[node [:inherits]] [:variables] result.merge name => node.merge(:variables => node [:variables] .merge(vars)) end' – user1727142