我正在使用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)
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到以下内容:
Each
"x"
Pre-accumulator
"x"
Run Code Online (Sandbox Code Playgroud)
Enum.reduce/2使用枚举的第一个值作为初始累加器.如果可枚举只有一个元素(就像nodes你正在使用的那样),那么你传递给的函数reduce/2永远不会被执行,因为第一个值是累加器,并且没有其他值可以减少.
不可否认,文档中没有说明Enum.reduce/2:
http://elixir-lang.org/docs/stable/elixir/Enum.html#reduce/2
但是再一次,使用第一个值作为初始累加器,同时减少它就没有意义,因为它将被"使用"两次.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |