Groovy使用冒号

时间:2016-10-04 10:10:59

标签: groovy

我想知道为什么这种语法与传播列表和地图不一致。例如,在此代码中

def list =[1,2,3]
def map =[a:1,b:2]
println "${[*list]}"
println "${[*:map]}"

列表传播单个*,并映射*:

它与传播运营商内部的运作方式有关吗?因为没有看到* map构造的任何其他用法(比如使用[:]定义空地图有意义将它与列表区分开来。)

1 个答案:

答案 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