2016-11-07 10 views
0

現在パターンマッチングで正規表現を使用しているScala 2.11では、Seq [Char]やMatchとマッチしない限り、代わりの方法があります。現在、次の例ではSeq [Char]戦略でgetValueV2を実装しましたが、冗長で十分には見えません。あなたが正規表現を交換するために持っているん推奨されていません - スカラ正規表現パターンマッチング

他にどのような提案、

trait MyHelper { 
    //param Regex is deprecated 
def getValue(option: Option[scala.Any]): String = { 
    val param = """(?:String|Boolean)Option\((.*)\)""".r 
    option.getOrElse("") match { 
    case param(s) => s 
    case arr: Array[_] => arr.mkString("") 
    case _ => "" 
    } 
} 

def getValueV2(option: Option[scala.Any]): String = { 
    option.getOrElse("") match { 
     case s : String => s.toSeq match { 
     case p if p.endsWith(")") => p match { 
     case Seq('S', 't', 'r', 'i', 'n', 'g', 'O', 'p', 't', 'i', 'o', 'n', '(', [email protected]_*) => suffix.toString.substring(0, suffix.length -1) 
      case Seq('B', 'o', 'o', 'l', 'e', 'a', 'n', 'O', 'p', 't', 'i', 'o', 'n', '(', [email protected]_*) => suffix.toString.substring(0, suffix.length -1) 
      case _ => s     
     } 
     case _ => s 
     } 
     case arr: Array[_] => arr.mkString("") 
     case _ => "" 
    } 
    } 
} 

私はkantan.regexと呼ばれる別のライブラリを探してきたが、大きなコミュニティを持っていないようです。何が最善のアプローチは、正規表現を保持し、廃止された警告を無視するだろうか?

答えて

1

Stringの入力とのマッチングだけに興味があるので、Regexを適用する前にタイプをテストしてください。

def getValue(option: Option[scala.Any]): String = { 
    val param = """(?:String|Boolean)Option\((.*)\)""".r 
    option.getOrElse("") match { 
    case str: String => str match { 
     case param(s) => s 
     case _ => "" 
    } 
    case arr: Array[_] => arr.mkString("") 
    case _ => "" 
    } 
} 

これは警告なしでコンパイルされます。

+0

ほぼ完璧な、私がお勧めしたいだけ修正がケースでなければなりません_ => STR – raul782

+0

あなたのオリジナルの 'getValue'が可能、結果としてそれを持っていなかったが、私が見る「」_ =>最初 ケースですV2に追加されました。とても良い。私はあなたの要件を満たすために作られるべき他の改造があると確信しています。ポイントは、非推奨の方法でRegexパターンを使用することができる(そして、そうすべきである)ことです。 – jwvh

+0

十分にお手入れしていただきありがとうございます。 – raul782

関連する問題