Scala 函数应用程序顺序
我有一些lambda表达式,如下所示:Scala 函数应用程序顺序,scala,Scala,我有一些lambda表达式,如下所示: val foo : (Int => Option[String]) = (x: Int) => Some("foo") val bar : (Int => Option[String]) = (x: Int) => Some("bar") Seq(foo,bar).flatMap(_ (2)) 并按照我的预期进行评估: res0: Seq[String] = List(foo, bar) 现在,我将更改lambda表达式,使其
val foo : (Int => Option[String]) = (x: Int) => Some("foo")
val bar : (Int => Option[String]) = (x: Int) => Some("bar")
Seq(foo,bar).flatMap(_ (2))
并按照我的预期进行评估:
res0: Seq[String] = List(foo, bar)
现在,我将更改lambda表达式,使其取整数并返回未来的计算:
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
val foo1 : (Int => Future[Option[String]]) = (x: Int) => Future successful Some("foo")
val bar1: (Int => Future[Option[String]]) = (x: Int) => Future successful Some("bar")
我希望得到与以前相同的结果,即
List(“foo”,“bar”)
,但我不确定如何实现它。我想我需要使用Monad Transformers,但不完全确定。您可以使用Future.sequence
将结果转换为Future[List]
,然后将其展平:
Future.sequence(Seq(foo1,bar1).map(_ (2))).map(_.flatten)
这将返回一个Future[List[String]]
,然后您可以根据需要处理Future
。