这是“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] ????????
答案 0 :(得分:1)
previous()
应该是idx - 1
而不是idx + 1
:
Weekday previous() { new Weekday(idx-1) }
可能是复制粘贴错字。