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