我想知道为什么这种语法与传播列表和地图不一致。例如,在此代码中
def list =[1,2,3]
def map =[a:1,b:2]
println "${[*list]}"
println "${[*:map]}"
列表传播单个*,并映射*:
它与传播运营商内部的运作方式有关吗?因为没有看到* map构造的任何其他用法(比如使用[:]定义空地图有意义将它与列表区分开来。)
答案 0 :(得分:2)
扩展运算符(*)用于从集合中提取条目并将它们作为单独的条目提供。
<强> 1。传播列表元素:
在列表文字中使用时,展开运算符就像将展开元素内容内联到列表中一样:
def items = [4,5] def list = [1,2,3,*items,6] assert list == [1,2,3,4,5,6]
来源:http://docs.groovy-lang.org/latest/html/documentation/#_spread_list_elements
<强> 2。传播地图元素:
展开图运算符的工作方式与展开列表运算符类似,但对于地图。它允许您将地图的内容内联到另一个地图文字中,如下例所示:
def m1 = [c:3, d:4] def map = [a:1, b:2, *:m1] assert map == [a:1, b:2, c:3, d:4]
来源:http://docs.groovy-lang.org/latest/html/documentation/#_spread_map_elements