2014-02-18 57 views
7

我有幾種計算值的方法,以降低偏好爲準。Lazily coalesce Scala中的選項

firstWay() 
second() + way() 
orA(thirdWay()) 

其中每個返回Option。我想「合併」這些並獲得Option,其中第一個爲Some,如果全部返回None,則返回None

當然,如果firstWay()返回Some,我不應該計算其餘的。

什麼是最習慣(或至少合理可讀)的方式來做到這一點?

回答

11
firstWay().orElse(second() + way()).orElse(orA(thirdWay())) 

orElse的論點是懶洋洋的評價。

請參閱the documentation

1

如果你有足夠的辦法是卡羅爾的答案變得很困難,或事先不知道有多少:

val options: Stream[Option[A]] = ... 
// in the example: firstWay() #:: (second() + way()) #:: orA(thirdWay()) 

options.foldLeft[Option[A]](None)(_.orElse(_))