2012-11-08 67 views
0

我有幾個問題在範圍和地圖上應用傳播運算符。參考下面的代碼,錯誤行被標記。傳播範圍和地圖

(1)「assert」適用於更新的範圍,但爲什麼不打印「println」?

(2)當我們說「*範圍」時,groovy可以計算出並擴大範圍。那麼爲什麼「地圖」也沒有工作,爲什麼我們需要說「:地圖」呢?

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

當你撥打:

println [0, *range] 

它試圖調用getAt一個屬性println。你需要用括號中的列表,以幫助解析出來:

println([ 0, *range ]) 

而對於第二個錯誤,*在這種形式的傳播運營商。它用於傳播列表。

你有一個地圖,所以需要使用擴散圖運算符*:(如你所見)