深入解释ruby中的reduce/inject方法

Pet*_*per 3 ruby reduce functional-programming

我已经绞尽脑汁待了一段时间.

使用reduce时 - 为什么返回的第一个元素没有执行块中定义的操作?或者我错过了如何减少工作的关键点?

在以下示例中:

arr = [1, 3, 5]

arr.reduce {|sum, n| sum + (n * 3) }
#=> 25
Run Code Online (Sandbox Code Playgroud)

我原以为结果是27.

以来:

0 + (1 * 3) = 3
3 + (3 * 3) = 12
12 + (5 * 3) = 27
Run Code Online (Sandbox Code Playgroud)

经过一段时间玩它后,我发现在第一个"滴答"中 - 来自数组的对象只是被添加到总和而不是乘以.所以计算更像是:

??? = 1
1 + (3 * 3) = 10
10 + (5 * 3) = 25
Run Code Online (Sandbox Code Playgroud)

有人能帮我弄明白我走的路吗?

Ser*_*sev 6

它在文档中.

如果没有为memo显式指定初始值,那么集合的第一个元素将用作memo的初始值.


Ric*_*etz 6

我在 Ruby 注入/减少方法中的默认值也有类似的问题,所以我尝试将其可视化

默认值可视化