Groovy中1..5,[* 1..5]和[1..5]之间有什么区别?

时间:2013-08-19 17:34:35

标签: groovy range

在Groovy中,有什么区别,

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

*中的[*1..5]符号化了什么?

3 个答案:

答案 0 :(得分: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有一个使用它的详细例子。

答案 1 :(得分:6)

当您将范围对象放入列表中时,您会得到一个包含IntRange类型元素的列表:

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

通过应用扩展运算符,它扩展了范围,你得到一个包含五个元素的列表,范围代表的实际整数:

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

答案 2 :(得分:2)

此处*(展开运算符)会扩展范围1..5,因此您会得到该范围内的整数列表[1, 2, 3, 4, 5]