如何在Scala中对序列中的函数进行惰性求值

时间:2014-04-14 13:48:48

标签: scala

假设我在一个可以返回Option [File]的类中有三个函数。我正在寻找一种很好的方法来按顺序执行它们并在第一个函数求值为Some时停止(类似于pick()但是使用惰性求值),即我不想使用嵌套的if-else语句。

abstract class Foo() {
  def first(): Option[File]
  def second(): Option[File]
  def third(): Option[File]
  def pick(): Option[File] = {
    Seq(first(), second(), third()).find(_.isDefined).map(_.get)
  )
}

2 个答案:

答案 0 :(得分:2)

Option.orElse的参数按名称传递,因此您可以使用它来链接您的方法:

def pick(): Option[File] = first orElse second orElse third

答案 1 :(得分:2)

scala> def f1:Option[Int] = {println("1"); None}
f1: Option[Int]

scala> def f2:Option[Int] = {println("2"); Some(2)}
f2: Option[Int]

scala> def f3:Option[Int] = {println("3"); Some(3)}
f3: Option[Int]

scala> f1 orElse f2 orElse f3
1
2
res0: Option[Int] = Some(2)