scala是否有一个懒惰的评估包装器?
我想返回一个结果的包装器/持有者,这个结果我只想计算一次,而且只有在实际使用该结果的情况下。比如:scala是否有一个懒惰的评估包装器?,scala,lazy-evaluation,Scala,Lazy Evaluation,我想返回一个结果的包装器/持有者,这个结果我只想计算一次,而且只有在实际使用该结果的情况下。比如: def getAnswer(question: Question): Lazy[Answer] = ??? println(getAnswer(q).value) 使用lazy val,这应该很容易实现: class Lazy[T](f: () => T) { private lazy val _result = Try(f()) def value: T = _result.
def getAnswer(question: Question): Lazy[Answer] = ???
println(getAnswer(q).value)
使用lazy val
,这应该很容易实现:
class Lazy[T](f: () => T) {
private lazy val _result = Try(f())
def value: T = _result.get
}
但我想知道,标准API中是否已经有类似的东西
快速搜索指向,但两者都不是我想要的
Streams会记忆流元素,但第一个元素似乎是在构造时计算的:
def compute(): Int = { println("computing"); 1 }
val s1 = compute() #:: Stream.empty
// computing is printed here, before doing s1.take(1)
类似地,DelayedLazyVal
在构建时开始计算,甚至需要执行上下文:
val dlv = new DelayedLazyVal(() => 1, { println("started") })
// immediately prints out "started"
有一个
scalaz.Need
,我想你可以使用它。你能详细说明一下为什么你提到的两个内置项都不能满足你的需要吗?增加了关于内置项不能满足需要的详细信息。。。