Groovy半独家范围奇怪的行为

时间:2015-09-11 16:10:24

标签: groovy

这是“Groovy in Action”一书中的代码示例。为什么 Groovy 在使用半独占范围时会显示此行为。它应该返回范围中除最后一个元素之外的所有元素,但它有时会显示范围中的所有元素加一。

这是样本。

 class Weekday implements Comparable {
    static final DAYS = [
        'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
    ]
    private int idx = 0

    Weekday(index)     { idx = index }
    Weekday next()     { new Weekday(idx+1) }
    Weekday previous() { new Weekday(idx+1) }
    int compareTo(Object other) { this.idx <=> other.idx }

    String toString() {
        def index = idx % DAYS.size()
        while (index < 0 ) index += DAYS.size()
            DAYS[index]
    }
}

def mon = new Weekday(1)
def fri = new Weekday(5)

7.times { mon++ } // Monday following week

println fri.idx   //  5
println mon.idx   //  8

println 5 .. 8    // [5, 6, 7, 8]
println fri..mon  // [Fri, Sat, Sun, Mon] Ok without half-exclusive
println 5 ..< 8   // [5, 6, 7]
println fri..<mon // [Fri, Sat, Sun, Mon, Tue] ????????

1 个答案:

答案 0 :(得分:1)

previous()应该是idx - 1而不是idx + 1

Weekday previous() { new Weekday(idx-1) }

可能是复制粘贴错字。