带冒号的Groovy spread运算符映射语法
我想知道为什么这种语法在传播列表和地图时不一致。例如,在本代码中带冒号的Groovy spread运算符映射语法,groovy,Groovy,我想知道为什么这种语法在传播列表和地图时不一致。例如,在本代码中 def list =[1,2,3] def map =[a:1,b:2] println "${[*list]}" println "${[*:map]}" 列表以单个*展开,地图以*展开: 它是否与spread operator内部的工作方式有关?因为没有看到*map构造的任何其他用法(例如用[:]定义空映射有助于将其与列表区分开来)。使用扩展运算符(*)从集合中提取条目,并将其作为单个条目提供 1。排列列表元素: 在列表文字
def list =[1,2,3]
def map =[a:1,b:2]
println "${[*list]}"
println "${[*:map]}"
列表以单个*展开,地图以*展开:
它是否与spread operator内部的工作方式有关?因为没有看到*map构造的任何其他用法(例如用[:]定义空映射有助于将其与列表区分开来)。使用扩展运算符(*)从集合中提取条目,并将其作为单个条目提供
1。排列列表元素:
在列表文字中使用时,排列运算符的作用就像排列元素内容内联到列表中一样:
def items = [4,5]
def list = [1,2,3,*items,6]
assert list == [1,2,3,4,5,6]
资料来源:
2。分布图元素:
“扩展贴图”操作符的工作方式与“扩展列表”操作符类似,但用于贴图。它允许您将一个映射的内容内联到另一个映射文本中,如以下示例所示:
def m1 = [c:3, d:4]
def map = [a:1, b:2, *:m1]
assert map == [a:1, b:2, c:3, d:4]
来源:
*:
只是一个操作符,就像*
或?:
或+
。。。这与它的内部工作方式无关,它只是扩展映射的操作符的“名称”。我找到了等价的语法defmap=[a:1,b:2]+m1
更易于阅读。是的,我也是,但@Vuk要求*:
的重要性,所以我给了他一个例子。谢谢你的回答。我已经阅读了文档,但问题是为什么同一个操作符在一种情况下使用*而在另一种情况下使用*:符号。由于groovy倾向于尽可能地简化事情,我想肯定有一个很好的理由。我不确定groovy creator为什么保持这种方式,但由于Map
表示为key:value
对,所以他们一定考虑过保持它*:
,因为Map包含:
。