注入減少
注入和減少是同一事物的不同名稱。在其他語言中,這些函式通常稱為摺疊(如 foldl 或 foldr)。這些方法在每個 Enumerable 物件上都可用。
Inject 採用兩個引數函式,並將其應用於 Array 中的所有元素對。
對於陣列 [1, 2, 3]
,我們可以通過指定起始值和塊來新增所有這些以及起始值零,如下所示:
[1,2,3].reduce(0) {|a,b| a + b} # => 6
在這裡,我們將函式傳遞給一個起始值和一個塊,表示將所有值一起新增。該塊首先以 0
作為 a
而 1
作為 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