范围允许您创建顺序值列表。这些可以用作ListRange 扩展 java.util.List
    用符号定义的范围..是包容性的(即列表包含 from 和 to 值)。
    用符号定义的范围..<是半开的,它们包括第一个值但不包括最后一个值。
    用符号定义的范围<..也是半开的,它们包括最后一个值但不包括第一个值。
    用符号定义的范围<..<是完全开放的,它们不包括第一个值也不包括最后一个值。

    1. // 包含范围
    2. def range = 5..8
    3. assert range.size() == 4
    4. assert range.get(2) == 7
    5. assert range[2] == 7
    6. assert range instanceof java.util.List
    7. assert range.contains(5)
    8. assert range.contains(8)
    9. // 半开放范围
    10. range = 5..<8
    11. assert range.size() == 3
    12. assert range.get(2) == 7
    13. assert range[2] == 7
    14. assert range instanceof java.util.List
    15. assert range.contains(5)
    16. assert !range.contains(8)
    17. // 在不使用索引的情况下获取范围的端点
    18. range = 1..10
    19. assert range.from == 1
    20. assert range.to == 10

    请注意,int 范围是有效实现的,它创建了一个包含 fromto 值的轻量级 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;
    }