注入不按预期工作

Chr*_*ris 1 ruby inject

谁能解释为什么这两段代码不相同?要么我缺少一些东西,要么注入不做我认为它做的事情.鉴于:

nodes = [{id: 1}, {id: 2}]
Run Code Online (Sandbox Code Playgroud)

这段代码:

result = Hash.new
nodes.each do |node|
  result[node[:id]] = node.inspect
end
result
Run Code Online (Sandbox Code Playgroud)

回报

 {
  1 => "{:id=>1}",
  2 => "{:id=>2}"
}
Run Code Online (Sandbox Code Playgroud)

但是这个:

nodes.inject({}) {|hash, node|hash[node[:id]] = node.inspect}
Run Code Online (Sandbox Code Playgroud)

收益:

"{:id=>2}"
Run Code Online (Sandbox Code Playgroud)

为什么?

Ser*_*sev 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}"}
Run Code Online (Sandbox Code Playgroud)