В чем разница между `::`и `+ :`для добавления в список )?

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,:::против ++

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