传播范围和地图

时间:2012-11-08 06:34:42

标签: groovy

关于在范围和地图上应用展开运算符,我有几个问题。请参阅下面的代码,标记错误行。

(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

1 个答案:

答案 0 :(得分:1)

致电时:

println [0, *range]

它正试图在属性getAt上调用println。您需要将列表包装在大括号中以帮助解析器:

println( [ 0, *range ] )

对于第二个错误,此表单中的*是扩展运算符。它用于传播列表。

你有一张地图,所以需要使用点差地图运算符*:(如你所见)