价值从一系列期货初始化

Ser*_*iss 4 scala future

考虑以下代码片段:

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
}
Run Code Online (Sandbox Code Playgroud)

是否可以执行这样的初始化,但使用vals代替vars(不知何故)?关键是,我不想阻止并等待每个中间结果,只是为了最后一个.

Deb*_*ski 6

除非你有超过22个变量:

val (a, b, c, d, ..., v) = (for {
  a0 <- someMethodReturningFuture
  b0 <- someMethodReturningFuture(a0)
  ...
  u0 <- someMethodReturningFuture(t0)
} yield {
  (a0, b0, ..., u0, someCalculation(u0))
}).result
Run Code Online (Sandbox Code Playgroud)

  • Jack Bauer提出的超过22个值的建议:重构,现在!:) (2认同)