Виконайте таку функцію:
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")
Я думаю, це тому, що він вважає, що ціль насправді є ім'ям, яке ви хочете призначити будь-яким вхідним даних. Два питання:
Чому така поведінка? Не можете просто шукати існуючі змінні в області дії, які мають відповідний тип, і використовувати їх першими, і, якщо такі не знайдені, а потім трактувати ціль як ім'я для узгодження шаблону?
Чи існує рішення для цього? Будь-який спосіб вирівняти відповідність змінним? Зрештою, можна використати велику, якщо заява, але випадок відповідності є більш елегантним.