Lazily在Scala中合并选项

Pau*_*per 7 scala lazy-evaluation coalescing scala-option

我有几种计算价值的方法,优先级递减.

firstWay()
second() + way()
orA(thirdWay())
Run Code Online (Sandbox Code Playgroud)

每个都返回一个Option.我想"合并"这些并获得第一个Option返回的值Some,或者None如果全部返回None.

当然,如果firstWay()返回a Some,我不应该计算其余的.

什么是最惯用(或至少是合理可读)的方式?

Kar*_*l S 11

firstWay().orElse(second() + way()).orElse(orA(thirdWay()))
Run Code Online (Sandbox Code Playgroud)

orElse这个论点被懒惰地评估了.

请参阅文档.