有人可以解释为什么这两段代码不相同吗?要么我缺少一些东西,要么注入不做我认为它做的事情。给出:
nodes = [{id: 1}, {id: 2}]
此代码:
result = Hash.new
nodes.each do |node|
result[node[:id]] = node.inspect
end
result
返回
{
1 => "{:id=>1}",
2 => "{:id=>2}"
}
但是这个:
nodes.inject({}) {|hash, node|hash[node[:id]] = node.inspect}
返回:
"{:id=>2}"
为什么?
答案 0 :(得分:8)
注入不按预期工作
嗯,你的期望是错误的。 :)
阻止inject
/ reduce
应该返回累加器的新值。
nodes = [{id: 1}, {id: 2}]
res = nodes.inject({}) {|hash, node| hash[node[:id]] = node.inspect; hash}
res # => {1=>"{:id=>1}", 2=>"{:id=>2}"}