【发布时间】:2015-07-29 05:28:44
【问题描述】:
受到this question的启发,我认为以下是一个解决方案:
import scala.concurrent.Future
val x: Future[Option[Int]] = Future.successful { None }
val y: Future[Option[Int]] = Future.successful { Some(55) }
Future.reduce(Seq(x, y))(_ orElse _).value // expecting Some(Success(Some(55)))
令我惊讶的是,在 REPL 中执行此操作大多会给出None,而会不规律地给出Some(55):
res80: Option[scala.util.Try[Option[Int]]] = None
res81: Option[scala.util.Try[Option[Int]]] = None
res82: Option[scala.util.Try[Option[Int]]] = None
res83: Option[scala.util.Try[Option[Int]]] = Some(Success(Some(55)))
res84: Option[scala.util.Try[Option[Int]]] = None
所以这对我来说是一个 Scala WTF 时刻。我错过了什么吗?
【问题讨论】: