我做这样的事情:过滤里面换理解与期货
(for {
data <- Future(getData)
updated = makeChanges(data) if updated != data
_ <- Future(saveUpdates(updated))
_ <- Future(recordTransaction)
} yield()).recover { case e: NoSuchElementException =>() }
当过滤器并不满意,它跳过剩下的两个步骤,通过抛出一个异常(不好),那(好!)我必须抓住并处理结束。流量控制使用异常不会觉得太高雅了我,虽然,我从明显的不知道是否有更好的方式来做到这一点,除了 - 与if语句包裹的全部剩余线路:
_ <- if(updated != data) Future(saveUpdates(updated)) else Future.successful(())
_ <- if(updated != data) ...
如果你可以改变makeChanges返回的元组(改为:更新布尔:数据)就可以了,你能模式匹配,并决定哪些行动在这种情况下。它会使它更清洁 –
@LouisF。不明白你的意思。我可以很容易地在'updated!= data'上模式匹配,但不知道如何使用它来使其更清洁。用'match ... case'剪掉上一个剪下的'if ... else ..'? – Dima