这是《 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] ????????
previous()
应该idx - 1
代替idx + 1
:
Weekday previous() { new Weekday(idx-1) }
可能是复制粘贴错字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句