【发布时间】:2017-11-21 17:17:45
【问题描述】:
我想追加到Stream
但是下一个流依赖于之前Stream的折叠结果
这是我的做法,但 Stream s 被评估了两次
import fs2._
def ints(start: Int) = Stream.iterate(start) { i =>
println(i)
i + 1
}.take(10)
val s = ints(0)
def foldAppend(init: Int)(f: (Int, Int) => Int)(next: Int => Stream[Pure, Int]) = {
s ++ s.fold(init)(f).flatMap(next)
}
val res = foldAppend(0)((s, i) => s + 1)(ints)
println(res.toList)
如何实现只评估一次 s 的 foldAppend 方法。
【问题讨论】:
-
你确定你写的不是
def s而不是val s吗?就目前而言,我不确定是否有足够的信息来回答这个问题。一个完整的例子会很有帮助,这意味着s的完整定义。 -
@BrianMcCutchon 我已经添加了 scasite 链接