1

谁能解释为什么这两个代码片段不等价?要么我遗漏了一些东西,要么注入没有做我认为它做的事情。鉴于:

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

为什么?

4

1 回答 1

8

注入未按预期工作

好吧,你的期望是错误的。:)

Block to 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}"}
于 2013-02-20T16:58:59.003 回答