编写这个scala方法的最佳方法是什么?

编写这个scala方法的最佳方法是什么?,scala,Scala,从编写习惯代码、高效代码等角度来判断 我在下面定义了多种从getConf1、getConf2或getConf3获取conf值的方法,无论哪个方法在以该顺序调用时首先成功生成值。换句话说,如果getConf1产生一个值,我们将跳过剩下的两个。如果getConf1不产生一个值,那么我们将尝试getConf2,以此类推 def getConf1(name: String): Option[String] def getConf2(name: String): Option[String] def

从编写习惯代码、高效代码等角度来判断

我在下面定义了多种从getConf1、getConf2或getConf3获取conf值的方法,无论哪个方法在以该顺序调用时首先成功生成值。换句话说,如果getConf1产生一个值,我们将跳过剩下的两个。如果getConf1不产生一个值,那么我们将尝试getConf2,以此类推

def getConf1(name: String): Option[String]

def getConf2(name: String): Option[String]

def getConf3(name: String): Option[String]
方法1:

def getSetting(name: String): Option[String] = {
    var r = getConf1(name)
    if(!r.isDefined) { 
        r = getConf2(name)
    }
    if(!r.isDefined) { 
        r  getConf3(name)
    }
    r 

}
方法2:

def getSetting(name: String): Option[String] = {
    val val1 = getConf1(name)
    val val2 = getConf2(name)
    val val3 = getConf3(name)

   (val1, val2, val3) match {
             case (a: Some[String], _, _) => a
             case (_, a: Some[String], _) => a
             case (_, _, a: Some[String]) => a
             case _ => None
   }
}
方法3:

def getSetting(name: String): Option[String] = {
 val myList = List( 
    (n:String) => getVal1(n),
    (n:String) => getVal2(n),
    (n:String) => getVal3(n))

doConditionally(name, myList)
}


带有
orElse的链条

getConf1(name).orElse(getConf2(name)).orElse(getConf3(name))

请注意,
getConf2
getConf3
只有当链到达它们时才被调用(它们被惰性地计算)。

一个旁注,用于查找第一个传递值的函数

Seq(getConf1 _, getConf2 _, getConf3 _).find(_("aName").isDefined)

你的意思是
getConf1(名称)或lse getConf2(名称)或lse getConf3(名称)
。我要说:漂亮!
Seq(getConf1 _, getConf2 _, getConf3 _).find(_("aName").isDefined)