#kotlin
#kotlin
Вопрос:
Я завершаю упражнение Kotlin Koans «Для цикла» и мне интересно, почему:
class DateRange(val start: MyDate, val end: MyDate) : Iterable<MyDate> {
override fun iterator(): Iterator<MyDate> = DateIterator(this)
}
class DateIterator(val daterange: DateRange) : Iterator<MyDate> {
var currentDay: MyDate = daterange.start
override fun hasNext(): Boolean = currentDay.next() <= daterange.end
override fun next(): MyDate {
val result = currentDay
currentDay = currentDay.nextDay()
return result
}
}
Я получаю Unresolved reference: next
on currentDay()
.
Я знаю, что ответ на этот вопрос — точно такой же код без next()
, но мне интересно, почему он не работает — учитывая, что currentDay
это MyDate
объект и next()
возвращает MyDate
.
Есть идеи, почему?
Комментарии:
1. Вы определили
next()
метод вMyDate
классе?
Ответ №1:
рассмотрение
currentDay
являетсяMyDate
объектом иnext()
возвращаетMyDate
Но в next()
классе MyDate
нет метода (именно это пытается сказать сообщение об ошибке). Поэтому currentDay.next()
не будет компилироваться.
Существует только next()
в DateIterator
классе (но, конечно, вы не хотите вызывать это, поскольку это имело бы побочный эффект продвижения итератора).
Вы, должно быть, хотели вызвать currentDay.nextDay()
вместо этого.