Сопоставление порядка с помощью экстрактора

Я определил пользовательский экстрактор, чтобы получить последний элемент списка, как в 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"
}

В чем причина такого поведения?

6
задан Community 23 May 2017 в 12:11
поделиться