Поток readLines - PullRequest
       23

Поток readLines

7 голосов
/ 22 июля 2010

Я пытаюсь создать бесконечный поток строк из вызовов readLine:

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

Но похоже, что вызов readLine не вызывается лениво. Сразу после ввода этого кода readLine ожидает ввода, затем поток становится бесконечным списком того же ввода. Можно ли достичь того, что я имею в виду?

Ответы [ 2 ]

11 голосов
/ 22 июля 2010
import java.io.{BufferedReader, InputStreamReader}
val in = new BufferedReader(new InputStreamReader(System in))
val input = Stream.continually(in readLine)
3 голосов
/ 22 июля 2010

См. Пример на Поток .Обратите внимание, что ленивый стук в хвосте, а не в голове .Каждый раз, когда вызывается блок, он должен возвращать следующие минусы (включая следующий блок, который, в свою очередь, должен предоставлять следующие минусы, включая ....)

Вот подпись для Stream.cons: <<a href="http://www.scala-lang.org/docu/files/api/scala/collection/immutable/Stream" rel="nofollow noreferrer">http://www.scala -lang.org / доку / файлы / API / Scala / коллекция / неизменные / поток $$ против $ .html>.Обратите внимание на thunk (=> Stream) в качестве 2-го аргумента для apply.

...