我一直在试图简化我在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