Функция итератора не работает с внутренней переменной - PullRequest
0 голосов
/ 03 марта 2019

Я выполняю упражнение для цикла Котлина Коанса и задаюсь вопросом, почему:

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 на currentDay().

Я знаю, что ответом на этот вопрос является точно такой же код без next(), но мне интересно, почему он не работает - учитывая, что currentDay является MyDate объектом, а next() возвращаетMyDate.

Есть идеи, почему?

1 Ответ

0 голосов
/ 03 марта 2019

с учетом currentDay является MyDate объектом, а next() возвращает MyDate

Но в классе MyDate нет метода next() (которыйэто то, что сообщение об ошибке пытается сказать).Так что currentDay.next() не будет компилироваться.

В классе DateIterator есть только next() (но, конечно, вы не хотите называть это, поскольку это будет иметь побочный эффект от продвижения итератора).

Вы должны были вместо этого позвонить currentDay.nextDay().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...