Groovyでは、次の違いは何ですか?
def a=1..5
def b= [*1..5]
def c=[1..5]
は何*
を[*1..5]
象徴していますか?
*
Spread Operatorを表します。あなたの例を詳しく説明します:
a = 1..5
b = [*1..5]
c = [1..5]
assert a.class.name == "groovy.lang.IntRange" //Is a range from 1 till 5
assert b.class.name == "java.util.ArrayList" //Spread the range in a list
assert c.class.name == "java.util.ArrayList" //Is a list
@ataylorの説明を拡張する:
assert a.size() == 5
assert b.size() == 5
assert c.size() == 1
の各要素に到達するにc
は、それを反復する必要があります(範囲です)
c.each{println it}
Haki 氏によるGroovy Goodnessには、その使用法の詳細な例があります。
範囲オブジェクトをリストに入れると、 type の要素が 1 つあるリストが得られますIntRange
。
assert [1..5].size() == 1
スプレッド演算子を適用すると、範囲が拡張され、範囲が表す実際の整数である 5 つの要素を含むリストが得られます。
assert [*1..5].size() == 5