Groovy 注入展开操作符

Groovy 提供了一个*展开操作符来连接到涉及到的 list 的展开点操作符,这看起来就像使用逗号分隔的对象来创建 list 列表的相反操作,展开操作符按顺序分配 list 中所有的条目给接收者,这样接受的方法可以有多个参数,或者有一个 list 的参数。

这有什么好处?假设你有一个方法,这个方法在一个列表中返回多个结果,并且你的代码需要将这些参数传递给第二个方法,展开操作符分配列表中的所有结果为第二个方法的参数:[code]def getList(){

return [1,2,3]

}

def sum(a,b,c){

return a + b + c

}

assert 6 == sum(*list)
[/code]这样在接受方法单独声明每一个参数的时候,我们可以方便的传递多个参数给该方法。

使用展开操作符进行展开操作同样在 range 上及展开一个 list 中的条目到另一个 list 中也是可以工作的:[code]def range = (1…3)

assert [0,1,2,3] == [0,*range]
[/code]相同的戏法同样可以应用在 map 上:[code]def map = [a:1,b:2]

assert [a:1, b:2, c:3] == [c:3, *:map]
[/code]展开操作符淘汰了合并 list、range 和 map 需要的代码,你将在 10.3 节看到这个练习,这个操作符有助于实现一个用来进行数据库访问的用户命令语言。

如前面显示的断言,展开操作符在表达式中使用是十分方便的,支持在过程风格上的函数式编程风格,在过程风格中,你可以使用这样的语句 list.addAll(otherlist)。

现在,看看 groovy 最后的强劲特性,用这个特性你可以指派新的方法给任何 Groovy或者 java 类。