對於下面的代碼片段IDEA給出了一個警告,那future {None}
是多餘的:爲什麼IDEA在返回Future of None時發出警告?
queryString match {
case Some(query) => ... // Do async call
case None => future { None }
}
是否有更好的可能性辦呢?
對於下面的代碼片段IDEA給出了一個警告,那future {None}
是多餘的:爲什麼IDEA在返回Future of None時發出警告?
queryString match {
case Some(query) => ... // Do async call
case None => future { None }
}
是否有更好的可能性辦呢?
您可以在不產卵封閉,使用Future.successful[T](result: T)
創建已確定未來的,所以也許Future.successful(None)
是你想要的。
由於期貨已經獨立於其類型參數區分成功和失敗,但是,由於您的異步調用也可以省略Some
中的包裝,因此您也可以通過Future.failed(new Exception("No query string"))
發信號通知失敗。
我不知道IDEA的警告是在這種情況下有幫助。
你可能通過推動匹配下到未來沉默吧:
future {
queryString match {
case Some(query) => Some(computeResult(query))
case None => None
}
}
(或者更簡單地:future { queryString.map(computeResult(_)) }
)
我想我解決了這個問題由我自己:我不需要一個選項封裝在我的未來中,因爲未來本身也可能失敗,因此失敗類似於無。
現在我只返回一個未來:
queryString match {
case Some(query) =>
//async Call which returns a Future without Option
case None => throw new Exception("Error")
}
拋出異常是一個非常重量級的,而不是總是處理缺失值非常理想的手段。 – 2013-02-16 17:57:19
但大多數教程中的期望似乎都是由Exceptions處理的。在這裏看到:http://docs.scala-lang.org/sips/pending/futures-promises.html#functional_composition_and_forcomprehensions – Tyde 2013-02-17 00:32:58
一個'未來的[選項[T]]'可以返回'成功(無)'表示「沒事就去處理不當,但你想要的價值不在那裏「。 – 2013-02-17 14:25:52