Я хочу сделать что-то подобное в Scala.Scala: значения подачи в Iterator «изнутри»
def getFancyIterator: Iterator[Int] = {
... { /// Some arbitrary logic goes here: conditionals, loops, whatever
... {
... {
val x = ...
// Then at some point I call this:
feedNext(x)
}
}
}
}
Теперь, с внешней стороны все это должно выглядеть как обычный итератора, так что я мог бы сделать, например:
getFancyIterator.foreach(println)
Хитрость, конечно, что я не хочу, чтобы хранить все эти значения в коллекции в любой момент времени. Другими словами, я хочу, чтобы моя функция getFancyIterator
«подавала» значения итератора next()
«по запросу».
Я уверен, что должен быть какой-то (ошеломляюще) простой способ сделать это, но почему-то не приходит на ум ..
UPDATE: В сущности, я хочу do yield x
, но не только от нормального for
петли, но из какого-либо произвольного фрагмента кода.
Если 'feedNext' возвращает' итератор [Int] 'вы должны быть хорошо. Что он действительно возвращает? –
Нет, вся функция 'getFancyIterator' возвращает и итератор. 'feedNext' просто отмечает место, где я хочу« подать »следующее значение результирующему итератору. –
Спасибо за редактирование, Daniela –