我很难找到那个
3 in [1..7]
Groovy中的返回false
。
我检查了[1..7]
的类类型,结果证明它是一个包含一个元素的ArrayList
,而且一个元素的类型为IntRange
,包含我的7个元素,因此{{ 1}}返回3 in [1..7][0]
。
怎么回事?我当时认为true
应该是[1..7]
答案 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]
那样改变表达式类型。