关于在范围和地图上应用展开运算符,我有几个问题。请参阅下面的代码,标记错误行。
(1)“断言”适用于更新的范围,但为什么“println”不打印呢?
(2)当我们说“*范围”时,groovy可以找出并扩展范围。那么为什么“ map”也不起作用,为什么我们需要说“:map”?
def range = (1..3)
println range // prints: [1,2,3]
assert [0,1,2,3] == [0,*range] // works ok
println [0, *range] // error
def map = [a:1, b:2]
assert [a:1, b:2, c:3] == [c:3, *:map] // works ok
assert [a:1, b:2, c:3] == [c:3, *map] // error
答案 0 :(得分:1)
致电时:
println [0, *range]
它正试图在属性getAt
上调用println
。您需要将列表包装在大括号中以帮助解析器:
println( [ 0, *range ] )
对于第二个错误,此表单中的*
是扩展运算符。它用于传播列表。
你有一张地图,所以需要使用点差地图运算符*:
(如你所见)