2010-07-22 10 views
6

sto cercando di creare un flusso infinito di stringhe da readLine chiama:flusso di readlines

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

Ma sembra che la chiamata readLine non viene chiamato pigramente. Immediatamente dopo aver inserito quel codice, readLine si aspetta l'input, quindi il flusso diventa una lista infinita dello stesso input. È possibile realizzare ciò che ho in mente?

risposta

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

Non è necessario chiudere lo stream? – Programmer

3

Vedere l'esempio su Stream. Notare che il thunk pigro è nella coda, non nella testa. Ogni volta che il thunk viene richiamato dovrebbe restituire i successivi cons (incluso il thunk successivo che a sua volta dovrebbe fornire il successivo cons incl ....)

Ecco la firma per Stream.cons: < http://www.scala-lang.org/docu/files/api/scala/collection/immutable/Stream $$ cons $ .html >. Nota thunk (=> Stream) come secondo argomento a apply.