Ответ Джея Конрада почти верен. Важно то, что где-то есть объект с именем ::
, который реализует метод unapply
, возвращая тип Option[(A, List[A])]
. Thusly:
object :: {
def unapply[A](ls: List[A]): Option[(A, A)] = {
if (ls.empty) None
else Some((ls.head, ls.tail))
}
}
// case objects get unapply for free
case object Nil extends List[Nothing]
В случае ::
и List
этот объект происходит из-за того, что ::
является классом case, который расширяет черту List
. Однако, как показывает приведенный выше пример, он не имеет , чтобы быть классом дел вообще.