Соответствие шаблону - это языковая функция, в которой оператор match
является только самым заметным примером. Вот два других часто используемых примера:
val List(x,y,(z: Int,w: Int)) = List("one","two",(3,4))
for ((text,i) <- List(("one",1),("two",2))) println(text + " = " + i)
Итак, нет, вы не можете сделать это самостоятельно. Язык не позволяет вам определять новые способы создания переменных, так что это может произойти только при поддержке языка.
Сам оператор match
использует поддержку создания переменных, поддерживающую шаблон, внутри языка, но в принципе может быть реализован как функция библиотеки. Тем не менее, было бы неэффективным в нескольких случаях:
// This is implemented with fast jumps, not slow if-then-else!
n match {
case 0 => // Do action 0
case 1 => // Do action 1
case 2 => // Do action 2
case _ => // Do default action
}
// This is tail recursive, so you won't overflow the stack!
def recursiveMatch(xs: List[Any]): List[Any] = xs match {
case (x @ Int) :: rest => recursiveMatch(rest)
case _ => xs
}
Так, в конце концов, нет, вы не можете писать по шаблону себя, и в то время как вы могли бы написать заявление матча, есть преимущества в использовании существующих один.
В этом ответе, похоже, нет реального ответа. Это пушистые слова и похвалы ... – ziggystar