Quelle est la différence entre `::` et`+: "pour les ajoutant à une liste)?

List a 2 méthodes qui sont spécifiés pour ajouter un élément à un (immuable) liste:

  • +: (mise en place de Seq.+:), et
  • :: (définie uniquement dans List)

+: techniquement a un type plus général de la signature—

def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That
def ::[B >: A](x: B): List[B]

—mais en ignorant l'implicite, qui d'après la doc message exige simplement That être List[B], les signatures sont équivalentes.

Quelle est la différence entre List.+: et List.::? Si ils sont en fait identiques, je suppose +: serait préférable de ne pas dépendre de la mise en œuvre concrète List. Mais pourquoi une autre définition de la méthode, et quand le client le code de l'appeler?

Modifier

Il est aussi un extracteur pour :: dans la correspondance de modèle, mais je me demandais à propos de ces méthodes particulières.

Voir aussi: Scala liste de concaténation, ::: vs ++