生成器是一种特殊的迭代器,使用 延迟计算 生成元素,无需预先准备所有数据。在Kotlin中通过 iterator() 函数和 yield 关键字实现(协程的简化版)。那么我们在迭代器所实现的方法,也可以用生成器来替代。
class DateRange(val start: MyDate, val end: MyDate) : Iterable<MyDate> {
override fun iterator(): Iterator<MyDate> = iterator {
var current = start
while (current <= end) {
yield(current)
current = current.followingDate()
}
}
}