我只想为结果返回一个包装器/持有者,并且只在结果被实际使用时才计算一次。就像是:
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,DelayedLazyVal
但并不是我要找的东西。
流确实会记住流元素,但似乎第一个元素是在构造时计算的:
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
,我认为你可以使用这个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句