【发布时间】:2012-06-24 19:58:43
【问题描述】:
我想从下面的代码创建一个 Future[(Class1,Class2,Class3)] 类型的 Future。然而,我发现这样做的唯一方法是使用 zip()。我发现解决方案很丑陋,而且不是最佳的。任何人都可以启发我。
val v = for (
a <- {
val f0:Future[Class1] = process1
val f1:Future[Class2] = process2
val f2:Future[Class3] = process3
f0.zip(f1).zip(f2).map(x => (x._1._1,x._1._2,x._2))
} yield a // Future[(Class1,Class2,Class3)]
我也尝试过使用 Future.sequence(List(f0, f1, f2)) 但这不起作用,因为新的 Future 类型为 Future[List[U]] 其中 U 是 Class1/2/3 的 lub 而我想要一个保留原始类型的 3 元组
【问题讨论】:
-
除了@oxbow_lakes 的回答,这里是应用程序的一般直觉:当你有一个
(A, B, ...) => Z类型的函数f并且你想提升它对于(F[A], F[B], ...) => F[Z]类型的函数,您需要应用程序。在您的情况下,f = (_, _, _)和F = Future。
标签: scala akka future applicative