readLines流

时间:2010-07-22 06:11:37

标签: scala input stream scala-2.8 lazy-evaluation

我正在尝试从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立即进行输入,然后Stream成为同一输入的无限列表。是否有可能实现我的想法?

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:3)

请参阅Stream上的示例。请注意,懒惰的thunk在尾部,而不是头部。每次调用thunk时它应该返回下一个cons(包括下一个thunk,而下一个thunk应该提供下一个cons ...)

以下是Stream.cons的签名:< http://www.scala-lang.org/docu/files/api/scala/collection/immutable/Stream $$ cons $ .html>。请注意thunk(=> Stream)作为apply的第二个参数。