注入減少

注入和減少是同一事物的不同名稱。在其他語言中,這些函式通常稱為摺疊(如 foldl 或 foldr)。這些方法在每個 Enumerable 物件上都可用。

Inject 採用兩個引數函式,並將其應用於 Array 中的所有元素對。

對於陣列 [1, 2, 3],我們可以通過指定起始值和塊來新增所有這些以及起始值零,如下所示:

[1,2,3].reduce(0) {|a,b| a + b} # => 6

在這裡,我們將函式傳遞給一個起始值和一個塊,表示將所有值一起新增。該塊首先以 0 作為 a1 作為 b 然後將其結果作為下一個 a 執行,因此我們將 1 新增到第二個值 2。然後我們取結果(3)並將其新增到列表中的最後一個元素(也是 3),給出我們的結果(6)。

如果省略第一個引數,它會將 a 設定為列表中的第一個元素,因此上面的示例與:

[1,2,3].reduce {|a,b| a + b} # => 6

此外,我們可以將命名函式作為符號傳遞,而不是傳遞具有函式的塊,而不是使用起始值。有了這個,上面的例子可以寫成:

[1,2,3].reduce(0, :+) # => 6

或省略起始值:

[1,2,3].reduce(:+) # => 6