2015-06-21 5 views
0

Невозможно увидеть реальную разницу между :: и +: методом Scala List.Scala List method `::` vs `+:`

Я использовал REPL для тестирования и не вижу различий в результатах.

Любой может дать мне, как я могу использовать это правильно?

+0

:: не определен для Seq, только для списка – harshtuna

+0

Спасибо. Modified. – ttt

+0

См. Также http://stackoverflow.com/questions/30959597/why-can-i-use-operator-with-seq-in-pattern-matching-but-not-ewhere – AmigoNico

ответ

5

Рассматривая код List, +: использует :: (cons) оператор для добавления.

override def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That = bf match { 
    case _: List.GenericCanBuildFrom[_] => (elem :: this).asInstanceOf[That] 
    case _ => super.+:(elem)(bf) 
} 

В общем, +: определяется в SeqLike и любого набора реализации SeqLike можно использовать то же самое.

С другой стороны, :: определен в List и может использоваться только List.

+0

Так что для списка я могу использовать оба +: и ::? Сменная? – ttt

+0

да, вы можете это сделать. – 757071