【问题标题】:Lazily coalesce Options in ScalaScala中的延迟合并选项
【发布时间】:2014-02-18 01:14:37
【问题描述】:

我有几种计算值的方法,按偏好递减。

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

每个都返回一个Option。我想“合并”这些并获得一个Option,其中的第一个Some返回的值,或者None如果全部返回None

当然,如果firstWay() 返回Some,我不应该计算其余部分。

什么是最惯用(或至少合理可读)的方式来做到这一点?

【问题讨论】:

    标签: scala lazy-evaluation scala-option coalescing


    【解决方案1】:
    firstWay().orElse(second() + way()).orElse(orA(thirdWay()))
    

    orElse 的参数是惰性求值的。

    the documentation

    【讨论】:

      【解决方案2】:

      如果你有足够多的方式让 Karol 的答案变得笨拙,或者事先不知道有多少:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-16
        • 2010-11-04
        • 1970-01-01
        • 2012-06-15
        • 1970-01-01
        相关资源
        最近更新 更多