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