我正在使用Enum.reduce
,并尝试在reduce中添加一些调试输出,但它似乎不会在Enum.reduce/2
中输出它。在Enum.reduce/3
中按预期工作。
nodes = [%{"value" => "x"}]
Enum.each(nodes, fn (node) ->
IO.puts "Each"
IO.inspect node["value"]
end)
Enum.reduce(nodes, fn (node, acc) ->
IO.puts "Reduce"
IO.inspect node["value"]
[node["value"], acc]
end)
Enum.reduce(nodes, [], fn (node, acc) ->
IO.puts "Pre-accumulator"
IO.inspect node["value"]
[node["value"], acc]
end)
当我运行它时,我得到以下内容:
Each
"x"
Pre-accumulator
"x"
答案 0 :(得分:5)
Enum.reduce/2
使用枚举的第一个值作为初始累加器。如果可枚举只有一个元素(比如你正在使用的nodes
),那么传递给reduce/2
的函数永远不会执行,因为第一个值是累加器,并且没有其他值留下来减少。
诚然,Enum.reduce/2
http://elixir-lang.org/docs/stable/elixir/Enum.html#reduce/2
然后再次,使用第一个值作为初始累加器,同时减少它不会有意义,因为它将被"使用"两次。