7

In Groovy,what is the difference between,

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

what does * in [*1..5] symbolize?

4

3 回答 3

10

*表示展开运算符。详细说明你的例子:

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

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

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

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

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

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

于 2013-08-19T17:49:16.527 回答