Я определил пользовательский экстрактор, чтобы получить последний элемент списка, как в https://stackoverflow.com/a/6697749/1092910:
object :+ {
def unapply[A](l: List[A]): Option[(List[A], A)] = {
if (l.isEmpty)
None
else
Some(l.init, l.last)
}
}
Теперь это соответствует "хорошо":
List(1, 2, 3) match {
case init :+ last => "good"
case head :: tail => "bad"
}
Но если я добавлю еще одно предложение, оно вдруг совпадет с "плохим":
List(1, 2, 3) match {
case List(7) => "never"
case init :+ last => "good"
case head :: tail => "bad"
}
В чем причина такого поведения?