[英]Values initialized from a chain of futures
考虑以下代码片段:
class MyClass {
var a = _
var b = _
...
var y = _
val z = (for {
a0 <- someMethodReturningFuture
b0 <- someMethodReturningFuture(a0)
...
z0 <- someMethodReturningFuture(y0)
} yield {
a = a0
b = b0
...
y = y0
someCalculation(y)
}).result
}
是否可以执行这样的初始化,但使用val
s而不是var
s(不知何故)? 关键是,我不想阻止并等待每个中间结果,只是为了最后一个。
除非你有超过22个变量:
val (a, b, c, d, ..., v) = (for {
a0 <- someMethodReturningFuture
b0 <- someMethodReturningFuture(a0)
...
u0 <- someMethodReturningFuture(t0)
} yield {
(a0, b0, ..., u0, someCalculation(u0))
}).result
你能否使用lazy
值来延迟result
评估? 就像是:
class MyClass {
lazy val a = myFutures.a.result
lazy val b = myFutures.b.result
private val myFutures = new AnyRef {
val a = someMethodReturningFuture
val b = a.map( a0 => someMethodReturningFuture(a0) )
}
}
所有期货都是在初始化时创建的,没有阻塞,但是您将在第一次实际尝试使用结果时阻止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.