Функция итератора не работает с внутренней переменной

#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() вместо этого.