2010-07-22 3 views
6

Ich versuche, einen unendlichen Strom von Strings von readline zu erstellen ruft:Strom von Readlines

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

Aber es scheint, dass der Anruf nicht readline lazily aufgerufen wird. Unmittelbar nach Eingabe dieses Codes erwartet die readLine Eingaben, und der Stream wird zu einer unendlichen Liste derselben Eingabe. Ist es möglich, das zu erreichen, was ich vorhabe?

Antwort

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

Müssen Sie den Stream nicht schließen? – Programmer

3

Siehe das Beispiel unter Stream. Beachten Sie, dass der faule Thunk ist in den Schwanz, nicht der Kopf. Jedes Mal, wenn der Thunk aufgerufen wird, sollte es in den nächsten Nachteile zurückkehren (einschließlich der nächsten thunk die wiederum sollte die nächsten Nachteile inkl liefern ....)

Hier ist die Signatur für Stream.cons: < http://www.scala-lang.org/docu/files/api/scala/collection/immutable/Stream $$ $ cons .html >. Beachten Sie das Thunk (=> Stream) als das 2. Argument zu apply.