2017-01-26 3 views
4

В соответствии с потоком scala docs реализуются ленивые списки, где элементы оцениваются только тогда, когда они необходимы. Пример;Scala как получить последнее расчетное значение потока?

val fibs: Stream[BigInt] = BigInt(0) #:: BigInt(1) #:: fibs.zip(fibs.tail).map(n => { 
    n._1 + n._2 
}) 

После этого в scala repl;

fibs(4) 
fibs 

распечатать;

res1: Поток [BigInt] = поток (? 0, 1, 1, 2, 3,)

Поскольку вызов .length или .last причин бесконечного цикла, как можно получить значение " 3 "(последнее расчетное значение) наиболее эффективным способом?

ответ

3

Вы не можете. Это не относится к API Stream. И по причине, потому что это позволит вам наблюдать значение, которое изменяется со временем от Stream и нарушает (ленивый) неизменный характер Stream.

Смежные вопросы