Причина такого поведения соответствия scala-шаблонов лежит в системе типов. Scala имеет очень прочную систему типов, которая обеспечивает высокую степень безопасности и улавливает ошибки во время компиляции. Если вы объявляете функцию с параметром вместо Any, она также выдает ту же ошибку.
Для ex: -
def echoWhatYouGaveMe(x: (Int, Int)): String = x match {
case (a, b) => s"got $a and $b"
case (a, b, c) => s"got $a, $b, and $c"
case _ => "Unknown"
}
echoWhatYouGaveMe((1,2))
Вы получаете сообщение об ошибке
Error:(4, 9) constructor cannot be instantiated to expected type;
found : (T1, T2, T3)
required: (Int, Int)
case (a, b, c) => s"got $a, $b, and $c"
^
Если вы изменяете свой val myTuple и явно устанавливаете его тип в Any, это позволит вам выполнить сопоставление с образцом.
val myTuple: Any = (1, 2, 3)
val toPrint = myTuple match {
case (a, b, c) => s"got $a, $b, and $c"
case (a, b) => s"got $a and $b"
case _ => s"Unknown data"
}
Вы получаете такой же результат
myTuple: Any = (1,2,3)
toPrint: String = got 1, 2, and 3