Возьмем следующую функцию:
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")
Я предполагаю, что это происходит потому, что он думает, что цель - это имя, которое вы хотите назначить независимо от того, что вводится. Два вопроса:
-
Почему такое поведение? Невозможно рассмотреть только существующие переменные в области, которые имеют соответствующий тип, и использовать их в первую очередь, а если они не найдены, то обрабатывать цель как имя для patternmatch?
-
Есть ли обходной путь для этого? Любой способ сопоставления шаблонов с переменными? В конечном счете можно было бы использовать большой оператор if, но пример соответствия более изящный.