【发布时间】:2014-09-23 09:24:53
【问题描述】:
我正在使用 Stream 创建一个惰性序列。 我的序列是由 ++ 与其他序列组合而成的。 但是我的代码不起作用。为什么?
def select[T1, T2](s: Stream[T1], map: T1=>T2): Stream[T2] = {
for (sv <- s) yield map(sv)
}
var innerCounter = 0
var proxy = (x: Int) => { innerCounter += 1; x }
var list: Stream[Int] = select[Int,Int](Stream.empty, k => k)
for (nc <- 0 until 10) {
list = select[Int,Int](Stream.empty, k => k)
var i: Int = 0
while (i < CountConcat) {
i += 1
list = list ++ select[Int,Int](Stream(0), k => proxy(i + 100))
}
}
assert(innerCounter == 0)
【问题讨论】:
-
是的,为什么?请发布错误消息。你的代码试图实现什么?
-
我尝试实现对文件的延迟访问。在我的场景中,代理函数将在随机位置从打开的文件中读取。但! Stream init 和打开文件的时间之间有很大的差距。并且严格评估流的头部对我来说是不可接受的
标签: scala stream lazy-evaluation lazy-sequences