gpt4 book ai didi

elixir - Enum.reduce/2 不输出 IO

转载 作者:行者123 更新时间:2023-12-04 17:53:30 25 4
gpt4 key购买 nike

我正在与 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"

最佳答案

Enum.reduce/2使用可枚举的第一个值作为初始累加器。如果可枚举只有一个元素(如您正在使用的 nodes),则传递给 reduce/2 的函数永远不会执行,因为第一个值是累加器,并且没有其他值可以减少。

The docs for Enum.reduce/2 这样解释:

Since the first element of the enumerable is used as the initial value of the accumulator, fun will only be executed n - 1 times where n is the length of the enumerable. This function won't call the specified function for enumerables that are one-element long.



这是有道理的,因为使用第一个值作为初始累加器并同时减少它是没有意义的,因为它会被“使用”两次。

关于elixir - Enum.reduce/2 不输出 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31836820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com