我写了这个代码发现:scala.concurrent.Future [选项[INT]]需要:[?]选项
def m1(x: Int) = Future { if (x % 2 == 0) Some(x) else None }
def m2(x: Int) = Future { if (x % 2 != 0) Some(x) else None }
for {
x <- Some(3)
x1 <- m1(x)
x2 <- m2(x)
} yield x1 orElse x2
我的目标是,代码应该先打开M1的未来,如果有一些,然后使用该值。否则,它应该打开m2的未来并使用该值。
但它一直得到一个编译时错误
<console>:26: error: type mismatch;
found : scala.concurrent.Future[Option[Int]]
required: Option[?]
x1 : Option[Int] <- m1(x)
^
这和我写的代码不一样。 m1和m2接受一个Int ...不是一些(int) –
正确的,你可以使用模式匹配来获取只有当它存在的值。我现在编辑它。 –
如果你这样做,可以考虑使用'Future.successful(Some(3))'而不是'Future(一些(3))'。后者引入了不必要的异步边界并且需要存在'ExecutionContext',而前者只是构建了一个成功的'Future'实例。 – Haspemulator