法官從編寫代碼的成語,高效的代碼等哪個編寫scala方法最好?
的角度來看,我有多種方式定義見下文得到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)
}
def doConditionally[T1, T2](name: T1, list: List[(T1) => Option[T2]]): Option[T2] = {
list match {
case h::t =>
val r = h(name)
if(r.isEmpty) {
doConditionally(name, t)
} else {
r
}
case Nil =>
None
}
}
你的意思是'getConf1(名稱),否則容易getConf2(名稱),否則容易getConf3(名稱)'。 – Jubobs
是的。敬請諒解! :) – jkinkead
我要說:美麗! – Mike