基本上我想這個轉換:發生器/塊到迭代器/流轉換
def data(block: T => Unit)
到Stream(dataToStream是爲此轉換的假想功能):
val dataStream: Stream[T] = dataToStream(data)
我想這問題可以通過延續解決:
// let's assume that we don't know how data is implemented
// we just know that it generates integers
def data(block: Int => Unit) { for (i <- 0 to 10) block(i) }
// here we can print all data integers
data { i => println(i) }
// >> but what we really want is to convert data to the stream <<
// very dumb solution is to collect all data into a list
var dataList = List[Int]()
data { i => dataList = i::dataList }
// and make a stream from it
dataList.toStream
// but we want to make a lazy, CPU and memory efficient stream or iterator from data
val dataStream: Stream[Int] = dataToStream(data)
dataStream.foreach { i => println(i) }
// and here a black magic of continuations must be used
// for me this magic is too hard to understand
// Does anybody know how dataToStream function could look like?
謝謝,Dawid
恩惠無線答案,或有說服力的論點,沒有任何。 – 2010-09-28 18:27:08
你的「塊」不會產生任何值。這怎麼能變成流?單位是單身。 – 2010-09-28 18:38:23
所需的流是發送到「塊」的一系列參數,而不是這些調用的結果。 – 2010-09-28 19:02:59