groovy中的整数范围文字成为一个arraylist,其中一个元素是整数范围

时间:2018-06-15 12:19:13

标签: arraylist groovy int range

我很难找到那个

3 in [1..7]
Groovy中的

返回false

我检查了[1..7]的类类型,结果证明它是一个包含一个元素的ArrayList,而且一个元素的类型为IntRange,包含我的7个元素,因此{{ 1}}返回3 in [1..7][0]

怎么回事?我当时认为true应该是[1..7]

的一个实例

1 个答案:

答案 0 :(得分:2)

在Groovy中更正range definition

1..7

E.g。你可以在groovysh中测试它:

groovy:000> 1..7
===> [1, 2, 3, 4, 5, 6, 7]

当您将其定义为[1..7]时,您实际上在数组列表中创建了一个嵌套范围列表,这就是表达式3 in [1..7]返回false的原因。

groovy:000> 3 in 1..7
===> true
groovy:000> [1..7].dump()
===> <java.util.ArrayList@4a elementData=[1..7] size=1 modCount=1>
groovy:000> [1..7][0].dump()
===> <groovy.lang.IntRange@2b from=1 to=7 reverse=false inclusive=true modCount=0>
groovy:000> 3 in [1..7]
===> false
groovy:000> 

在某些情况下,您可能会看到如下表达式:

(1..7)

但是这个等价于1..7 - 括号只是设置表达式边界,它们不像[1..7]那样改变表达式类型。