我一直在試圖簡化我在Scala中做未來的方式。我得到了一個Future[Option[Future[Option[Boolean]]
,但我已經在下面進一步簡化了它。有沒有更好的方法來簡化這一點?未來[期權[期權[期權[布爾]]簡化期貨和期權?
通過未來的「失敗」不會似乎像這樣做的最好方法。即在順序世界中,我只是返回「失敗!!」任何時候它失敗而不是繼續結束。有其他方法嗎?
val doSimpleWork = Future {
//Do any arbitrary work (can be a different function)
true //or false
}
val doComplexWork = Future {
//Do any arbitrary work (can be a different function)
Some("result") //or false
}
val failed = Future {
//Do no work at all!!! Just return
false
}
val fut1 = doSimpleWork
val fut2 = doSimpleWork
val fut3 = (fut1 zip fut2).map({
case (true, true) => true
case _ => false
})
val fut4 = fut3.flatMap({
case true =>
doComplexWork.flatMap({
case Some("result") =>
doSimpleWork
case None =>
failed
})
case false =>
failed
})
fut4.map({
case true =>
"SUCCESS!!!"
case _ =>
"FAIL!!"
})
我的印象是你的錯誤邏輯變得過於複雜。有三種可能的方式來處理這個片段中的失敗:失敗的期貨,期權,布爾。我建議簡化這種情況作爲第一步,也許將不同的失敗轉化爲首選形式(例如只堅持未來失敗的結果)。 – 2013-04-30 08:03:25