我有几种计算价值的方法,优先级递减。
firstWay()
second() + way()
orA(thirdWay())
每个都返回Option
。我希望“合并”这些并获得Option
,其中Some
返回的值为None
,如果全部返回None
则为firstWay()
。
当然,如果Some
返回{{1}},我就不应该计算其余部分。
最常用的(或至少是合理可读的)方法是什么?
答案 0 :(得分:11)
答案 1 :(得分:1)
如果你有足够的方式让卡罗尔的答案变得笨拙,或者事先不知道多少:
val options: Stream[Option[A]] = ...
// in the example: firstWay() #:: (second() + way()) #:: orA(thirdWay())
options.foldLeft[Option[A]](None)(_.orElse(_))