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]
— но игнорируя неявное, которое, согласно сообщению документа, просто требует, чтобы That
было List[B]
, подписи эквивалентны.
В чем разница между List.+:
и List.::
? Если они на самом деле идентичны, я предполагаю, что +:
было бы предпочтительнее избегать зависимости от конкретной реализации List
. Но почему был определен еще один общедоступный метод и когда клиентский код мог его вызвать?
Существует также экстрактор для ::
в сопоставлении с образцом, но меня интересуют эти конкретные методы.
См. также:объединение списков Scala,:::против ++