2017-01-26 2 views
4

Selon scala docs stream implémente des listes paresseuses où les éléments ne sont évalués que lorsqu'ils sont nécessaires. Exemple;Scala comment obtenir la dernière valeur calculée du flux?

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

Après cela dans scala repl;

fibs(4) 
fibs 

Il s'imprimera;

RES1: flux [BigInt] = flux (? 0, 1, 1, 2, 3,)

Depuis l'appel .length ou .last causes boucle infinie, comment puis-je obtenir la valeur " 3 "(dernière valeur calculée) de la manière la plus efficace?

Répondre

3

Vous ne pouvez pas. Cela ne fait pas partie de l'API de Stream. Et avec raison, car cela vous permettrait d'observer une valeur qui change au fil du temps d'un Stream, et qui violent la nature immuable (paresseuse) de Stream.