Groovy中的注入方法是什么?

Groovy中的注入方法是什么?,groovy,Groovy,Groovy中的inject方法实际上做什么?我在谷歌上搜索了一下,没有找到确切的答案。有人能用一个简单的例子来指定它的用法吗?它对集合应用一个操作,并跟踪中间值。例如:[1,2,3,4]。注入(0,{sum,value->sum+value})。这表示使用0作为初始值,并对中间结果和顺序中的每个元素应用加法运算。操作的每个应用程序都会生成一个新的中间结果。在本例中,闭包将数字相加,从而生成列表的总和。你可以这样想象: <initial value> <operation>

Groovy中的
inject
方法实际上做什么?我在谷歌上搜索了一下,没有找到确切的答案。有人能用一个简单的例子来指定它的用法吗?

它对集合应用一个操作,并跟踪中间值。例如:
[1,2,3,4]。注入(0,{sum,value->sum+value})
。这表示使用0作为初始值,并对中间结果和顺序中的每个元素应用加法运算。操作的每个应用程序都会生成一个新的中间结果。在本例中,闭包将数字相加,从而生成列表的总和。你可以这样想象:

<initial value> <operation> <element1> <operation> ... <elementn>
要查找列表的产品,可以使用
[1,2,3,4].inject(1,{product,value->product*value})
。在这种情况下,1用作初始值,因为它是多应用程序的标识值

下面是一个将多单词字符串列表拆分为单词平面列表的示例:

strings = ["", "this", "is a", "test of inject!"]
words = strings.inject([], { list, value -> list + value.tokenize() })
assert words == ["this", "is", "a", "test", "of", "inject!"]

有时用于描述此操作的其他术语有“reduce”(如中所示)或“fold”(特别是a)。

在本例中,您可以说,tokenize做什么?tokenize只是在空白处拆分字符串。它与String.split相同,只是它返回的是一个列表而不是一个数组。方法名称的选择非常奇怪-我想知道为什么它没有命名为reduce或fold?名称
inject
来自smalltalk的ruby。为了举个例子,我很欣赏使用inject进行求和。但是,在Groovy中,您可以只执行
[1,2,3,4,5].sum()
strings = ["", "this", "is a", "test of inject!"]
words = strings.inject([], { list, value -> list + value.tokenize() })
assert words == ["this", "is", "a", "test", "of", "inject!"]