我做這樣的事情:過濾裏面換理解與期貨
(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