Я начинаю изучать Scala, и я не совсем понимаю некоторые способы сопоставления шаблонов. Может ли кто-нибудь объяснить мне, почему первый случай работает, но второй случай не работает?Scala pattern-matching confusion
def getFirstElement(list: List[Int]) : Int = list match {
case h::tail => h
case _ => -1
}
Scala> getFirstElement(List(1,2,3,4))
res: Int = 1
Scala> 1 :: List(1,2)
res: List[Int] = List(1, 1, 2)
def getSumofFirstTwoElement(list: List[Int]): Int = list match {
case List(a: Int, b: Int)++tail => a + b
case _ => -1
}
<console>:11: error: not found: value ++
Scala> List(1,2) ++ List(3,4,5)
res: List[Int] = List(1, 2, 3, 4, 5)
Также следует отметить, что это работает как hd :: tl, потому что оно заканчивается символом a:, что означает, что он может быть использован в этом правильном ассоциативном способе. Я начал придумывать способ заставить ваш ++ работать, но он просто не был бы симпатичен –