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 ++