1
我有以下的測試方法異常Scala的未來處理失敗的情況下
def test() = {
val aa = Future{10} map {
case x if x%2 == 0 => (x,x)
case _ => val kk = Future.failed(BadRequestException("dd")); kk
}
aa
}
如果我刪除case _
那麼方法的返回類型是Future[(Int, Int)]
這正是我想要的。但是,當我添加case _
方案時,返回類型將變爲Future[Object]
。我無法理解我應該改變什麼,因爲我們的代碼庫中的其他類似方法做類似的事情(我確信我錯過了一些微妙的東西),並且返回類型保持爲自然Future[(Int, Int)]
。畢竟,當我爲場景拋出一個異常時,我不希望方法的返回類型被改變。我錯過了什麼或做錯了什麼?
哦良好的漁獲,現在我知道了,至於而不是返回元組,我可以在它返回未來,然後flatMapping它照顧它,否則我會得到'未來[Future..'。我明白那一部分。我仍然得不到的是,編譯器爲什麼現在開心,並同意我想要的返回類型。 – curiousengineer
,因爲在這兩種情況下,返回類型是Future [(Int,Int)]和Future [BadRequestException],這個返回類型的聯合是Future [(Int,Int)]。而在你最初的映射操作中,兩個返回類型是Future [(Int,Int)]和Future [Future [BadRequestException]],它轉化爲一個聯合類型'Future [Object]' –
我在哪裏可以讀到關於這個再來一點。非常感謝這樣簡潔明瞭的解釋。我想了解哪些聯盟類型會導致哪種終極類型 – curiousengineer