假设我在一个可以返回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)
)
}
答案 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)