0

範囲とマップにスプレッド演算子を適用することについていくつか質問があります。以下のコードを参照してください。エラー行がマークされています。

(1) "assert" は更新された範囲で機能しますが、なぜ "println" はそれを印刷しないのですか?

(2) "*range" と言うと、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
4

1 に答える 1

1

電話すると:

println [0, *range]

getAtプロパティを呼び出そうとしていますprintln。パーサーを支援するために、リストを中かっこで囲む必要があります。

println( [ 0, *range ] )

2 番目のエラーの場合*、この形式は拡散演算子です。リストを広めるために使用されます。

マップがあるので、スプレッド マップ オペレーターを使用する必要があります*:(ご覧のとおり)。

于 2012-11-08T09:24:23.457 に答える