2013-02-20 48 views
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}" 

为什么?

回答

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

谢谢!天色已晚,知道我正在变厚! – Chris 2013-02-20 17:14:05