范围允许您创建顺序值列表。这些可以用作ListRange 扩展 java.util.List。
用符号定义的范围..是包容性的(即列表包含 from 和 to 值)。
用符号定义的范围..<是半开的,它们包括第一个值但不包括最后一个值。
用符号定义的范围<..也是半开的,它们包括最后一个值但不包括第一个值。
用符号定义的范围<..<是完全开放的,它们不包括第一个值也不包括最后一个值。
// 包含范围def range = 5..8assert range.size() == 4assert range.get(2) == 7assert range[2] == 7assert range instanceof java.util.Listassert range.contains(5)assert range.contains(8)// 半开放范围range = 5..<8assert range.size() == 3assert range.get(2) == 7assert range[2] == 7assert range instanceof java.util.Listassert range.contains(5)assert !range.contains(8)// 在不使用索引的情况下获取范围的端点range = 1..10assert range.from == 1assert range.to == 10
请注意,int 范围是有效实现的,它创建了一个包含 from 和 to 值的轻量级 Java 对象。
范围可用于任何实现 java.lang.Comparable 进行比较的 Java 对象,并且还具有方法next()和previous()返回范围中的下一个/上一个项目。例如,您可以创建一系列String元素:
// an inclusive range
def range = 'a'..'d'
assert range.size() == 4
assert range.get(2) == 'c'
assert range[2] == 'c'
assert range instanceof java.util.List
assert range.contains('a')
assert range.contains('d')
assert !range.contains('e')
您可以使用经典for循环对范围进行迭代:
for (i in 1..10) {
println "Hello ${i}"
}
或者,您可以通过使用方法迭代范围,以更 Groovy 的惯用风格实现each相同的效果:
(1..10).each { i ->
println "Hello ${i}"
}
范围也可以在switch语句中使用:
switch (years) {
case 1..10: interestRate = 0.076; break;
case 11..25: interestRate = 0.052; break;
default: interestRate = 0.037;
}
