为什么这不编译?我在Success
行和Failure
行中收到以下错误:
构造函数不能实例化为预期类型;找到: scala.util.Success[T] 必需: Int
和代码:
val future = Future { 1 }
future.map {
case Success(s) => s
case Failure(f) => 0
}
因为Future[Int]
map
期望一个具有域Int
的函数,但相反,您正在尝试将一些具有域Try[Int]
的函数传递到其中。
语法上最接近的工作是onComplete
:
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Try, Success, Failure}
val future = Future { 1 }
future.onComplete {
case Success(s) => s
case Failure(f) => 0
}
但是,这可能不是您想要的,因为表达式 s
和 0
不执行任何操作,因此它们不是非常有趣的回调。相反,您可能希望transform
结果:
future.transform {
case Success(s) => Success(s)
case Failure(f) => Success(0)
}
或从故障中recover
,并带有0
:
future.recover {
case f: Exception => 0
}
您是否正在尝试执行以下操作:
val future = Future {
1
}
future onComplete {
case Success(s) => s
case Failure(f) => 0
}