我正在尝试使用 Scalaz 的应用程序构建器来简化一些并行运行一些 futures 的代码:
import scalaz._, Scalaz._
val fooF: Future [String] = myService.getFoo ()
val barF: Future [String] = myService.getBar ()
val resultF = for {
foo <- fooF
bar <- barF
}
yield { foo + bar }
我知道我应该能够像这样重写上面的代码:
val resultF = (myService.getFoo () |@| myService.getBar ()) {
(foo, bar) => { foo + bar }
}
但是我遇到了以下编译错误:
value |@| is not a member of scala.concurrent.Future[String]
我做错了什么?
最佳答案
你需要在范围内有隐式的 ExecutionContext,它需要构建 Applicative for Future(以及 Monad 等)
import scalaz._, Scalaz._
import scala.concurrent.{Await, Future}
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global
val fooF: Future [String] = Future("aaa")
val barF: Future [String] = Future("bbb")
val result = (fooF |@| barF)((l, r) => s"$l$r")
println(Await.result(result, 10.seconds))
更新
你可以在scalaz.std.Future.scala中查看
implicit def futureInstance(implicit ec: ExecutionContext): Monad[Future] with Cobind[Future] =
new FutureInstance
关于scala - 值(value)|@|不是 scala.concurrent.Future[String] 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27406495/