7

Groovyでは、次の違いは何ですか?

def a=1..5
def b= [*1..5]
def c=[1..5]

は何*[*1..5]象徴していますか?

4

3 に答える 3

10

*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には、その使用法の詳細な例があります。

于 2013-08-19T17:42:27.273 に答える
6

範囲オブジェクトをリストに入れると、 type の要素が 1 つあるリストが得られますIntRange

assert [1..5].size() == 1

スプレッド演算子を適用すると、範囲が拡張され、範囲が表す実際の整数である 5 つの要素を含むリストが得られます。

assert [*1..5].size() == 5
于 2013-08-19T17:58:38.087 に答える