は、次の関数を取る:Scalaのパターンマッチングが変数で機能しないのはなぜですか?
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
このパターンはうまくマッチする:私が行うことができるようにしたいと思い何
scala> fMatch("a")
It was a
scala> fMatch("b")
It was something else
は次のとおりです。
def mMatch(s: String) = {
val target: String = "a"
s match {
case target => println("It was" + target)
case _ => println("It was something else")
}
}
これが放ちます次のエラー:
fMatch: (s: String)Unit
<console>:12: error: unreachable code
case _ => println("It was something else")
これは、ターゲットが実際に入力されたものに割り当てたい名前だと思うからです。 2つの質問:
この現象はなぜですか?適切な型を持つ既存の変数をスコープ内で探し、見つからなければpatternmatchの名前としてtargetを扱うことはできません。
回避策はありますか?変数とパターンマッチングする方法はありますか?最終的に大きなif文を使用できますが、大文字小文字の区別はよりエレガントです。
関連:http://stackoverflow.com/questions/7083502/why-cant-a-variable-be-a-stable-identifier –
私はこの質問、コード、および回答がScala 2.12.xでは時代遅れであると信じています。問題の一部として、適用されるバージョンが言及されていれば、うれしいでしょう。 – conny