注入不按预期工作

时间:2013-02-20 16:56:20

标签: ruby inject

有人可以解释为什么这两段代码不相同吗?要么我缺少一些东西,要么注入不做我认为它做的事情。给出:

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}"

为什么?

1 个答案:

答案 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}"}