【发布时间】:2016-02-18 09:30:06
【问题描述】:
为了了解 Elixir 如何执行 Enum.reduce,我将其插入 put 以观察输出。我不清楚为什么它首先执行第二个列表元素,而不是第一个,然后独立地遍历所有其他元素。
iex (30)> Enum.reduce([1,2,3,4], &(IO.puts("a#{&1} b#{&2}")))
a2 b1
a3 bok
a4 bok
(a 和 b 只是用来验证订单)
查看源代码,我认为它可以翻译成
:lists.foldl(&IO.puts("a#{&1} b#{&2}"), 1, [2,3,4])
产生相同的结果。
其中 1 是初始累加器,如果我给它一个函数来让它累积一些东西,它会说一些有趣的东西,而不是“bok”。
不过,将这些初始值取反让我觉得很奇怪。我应该如何考虑 Reduce 实施?
【问题讨论】: