Iterator.continually
обычно сочетается с takeWhile
:
var count = 0
def complexCompute(): Int = { count +=1; println("eval " + count); count }
val iter = Iterator.continually { complexCompute() }
iter.takeWhile(_ < 3).foreach(println)
Какие отпечатки:
eval 1
1
eval 2
2
eval 3
Таким образом, если условие, которое определяет, следует ли продолжить вычисление, может быть оценено за пределами вычисления, то это работает довольно хорошо.
В основном, я думаю, я говорю, что Iterator.continually(getNext()).takeWhile(_ != certainValue)
достигнет того, что вы пытаетесь сделать. Это лениво оценивается.