2010-07-22 3 views
6

je tente de créer un flux infini de chaînes de readLine appelle:Flux de readlines

import java.io.{BufferedReader, InputStreamReader} 
val in = new BufferedReader(new InputStreamReader(System in)) 
val input: Stream[String] = Stream.cons(in readLine, input) 

Mais il semble que l'appel readLine n'est pas appelé paresseusement. Immédiatement après la saisie de ce code, readLine attend l'entrée, puis le Stream devient une liste infinie de cette même entrée. Est-il possible d'accomplir ce que j'ai en tête?

Répondre

11
import java.io.{BufferedReader, InputStreamReader} 
val in = new BufferedReader(new InputStreamReader(System in)) 
val input = Stream.continually(in readLine) 
+0

Vous n'avez pas besoin de fermer le flux? – Programmer

3

Voir l'exemple au Stream. Notez que le thunk paresseux est dans la queue, pas la tête. Chaque fois que le thunk est invoqué il devrait renvoyer les contres suivants (y compris le thunk suivant qui à son tour devrait fournir les inconvénients suivants ....)

Voici la signature pour Stream.cons: < http://www.scala-lang.org/docu/files/api/scala/collection/immutable/Stream $$ contre $ .html >. Notez le thunk (=> Stream) comme le 2ème argument à apply.