裁判官それを、効率的なコードこのスカラー法を書く最も良い方法はどれですか?など慣用的なコードを書くの観点から
私は以下に定義する複数の方法を持っているが、この順序で呼び出されたときに成功した最初の値を生成する方getConf1、getConf2、またはgetConf3からのconf値を取得します。つまり、getConf1が値を返す場合、残りの2つはスキップされます。 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)
}
と
価値を提供する最初の関数を、見つけることができます。 – Jubobs
はい。更新中! :) – jkinkead
私は言うつもりです:美しい! – Mike