List имеет 2 метода, которые указаны для добавления элемента в список (неизменяемый):
-
+:(реализацияSeq.+:) и -
::(определен только вList)
+: технически имеет более общую подпись типа -
def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That
def ::[B >: A](x: B): List[B]
но игнорируя неявный, который согласно сообщению doc просто требует, чтобы That был List[B], подписи эквивалентны.
В чем разница между List.+: и List.::? Если они на самом деле идентичны, я полагаю, что +: было бы предпочтительнее избегать зависимости от конкретной реализации List. Но почему был определен другой публичный метод, и когда клиентский код назовет его?
Изменить
Существует также экстрактор для :: в сопоставлении с образцом, но мне интересно об этих конкретных методах.
См. также: Scala конкатенация списка,: vs ++