在Scala中惰性地合并选项

在Scala中惰性地合并选项,scala,lazy-evaluation,scala-option,coalescing,Scala,Lazy Evaluation,Scala Option,Coalescing,我有几种方法计算一个值,以减少偏好 firstWay() second() + way() orA(thirdWay()) 每个选项都返回一个选项。我想“合并”这些,并得到一个选项,其中第一个部分返回的值,或者无如果全部返回无 当然,如果firstWay() 做这件事最惯用的方法是什么(或者至少是合理可读的) firstWay().orElse(second() + way()).orElse(orA(thirdWay())) orElse的参数被延迟计算 请参阅。如果您有足够的方法使Kar

我有几种方法计算一个值,以减少偏好

firstWay()
second() + way()
orA(thirdWay())
每个选项都返回一个
选项
。我想“合并”这些,并得到一个
选项
,其中第一个
部分
返回的值,或者
如果全部返回

当然,如果
firstWay()

做这件事最惯用的方法是什么(或者至少是合理可读的)

firstWay().orElse(second() + way()).orElse(orA(thirdWay()))
orElse
的参数被延迟计算


请参阅。

如果您有足够的方法使Karol的答案变得难以理解,或者您事先不知道有多少:

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

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