2010-07-22 10 views
6

Estoy intentando crear un flujo infinito de cadenas de readLine llama:Arroyo de readlines

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

Pero parece que la llamada readLine no está siendo llamado pereza. Inmediatamente después de ingresar ese código, readLine espera la entrada, luego Stream se convierte en una lista infinita de esa misma entrada. ¿Es posible lograr lo que tengo en mente?

Respuesta

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

¿No necesita cerrar la transmisión? – Programmer

3

Vea el ejemplo en Stream. Tenga en cuenta que el thunk perezoso está en la cola, no en la cabeza. Cada vez que el procesador se invoca debe devolver los próximos contras (incluyendo el siguiente golpe seco que a su vez deben suministrar los próximos cons incl ....)

Aquí está la firma para Stream.cons: < http://www.scala-lang.org/docu/files/api/scala/collection/immutable/Stream $$ $ contras .html >. Tenga en cuenta el thunk (=> Stream) como el segundo argumento al apply.

Cuestiones relacionadas