我寫了這個代碼發現: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