我想知道为什么这个语法对于传播列表和映射不一致。例如,在这个代码Groovy使用冒号分布运算符映射语法
def list =[1,2,3]
def map =[a:1,b:2]
println "${[*list]}"
println "${[*:map]}"
列表铺展单*,并与*地图:
它是连接到如何传播运营商内部工作?因为没有看到* map构造的任何其他用法(就像使用[:]定义空映射将它与列表区分开来一样)。
我想知道为什么这个语法对于传播列表和映射不一致。例如,在这个代码Groovy使用冒号分布运算符映射语法
def list =[1,2,3]
def map =[a:1,b:2]
println "${[*list]}"
println "${[*:map]}"
列表铺展单*,并与*地图:
它是连接到如何传播运营商内部工作?因为没有看到* map构造的任何其他用法(就像使用[:]定义空映射将它与列表区分开来一样)。
传播运算符(*)用于从集合中提取条目并将它们作为单个条目提供。
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
我发现等效语法'def map = [a:1,b :2] + m1'更具可读性 –
是的,我也是,但@Vuk要求'*:'的意义,所以我给了他一个例子。 –
感谢您的回答。我已经阅读过文档,但问题是为什么同一个操作符在一个用例中使用*而在另一个*:符号中。由于时髦往往会尽可能简化事情,所以猜测一定有一个很好的理由。 –
'*:'只是一个运营商,像'*'或'?:'或'+'......它与内部的工作方式没有关系,它只是运营商传播地图的_“名称” –