Bei zwei Listen a
und b
, was ist der Unterschied zwischen a ::: b
und a ++ b
? Ich vermutete, dass eine dieser Betreiber würde einfach die anderen nennen, aber in der Tat sehen die Implementierungen völlig anders:Was ist der Unterschied zwischen ::: und ++ für Listen?
def :::[B >: A](prefix: List[B]): List[B] =
if (isEmpty) prefix
else if (prefix.isEmpty) this
else (new ListBuffer[B] ++= prefix).prependToList(this)
override def ++[B >: A, That](that: GenTraversableOnce[B])
(implicit bf: CanBuildFrom[List[A], B, That]): That = {
val b = bf(this)
if (b.isInstanceOf[ListBuffer[_]])(this ::: that.seq.toList).asInstanceOf[That]
else super.++(that)
}
Von einer Nutzungsperspektive sollte ich lieber a ::: b
oder a ++ b
? Gibt es aus einer Implementierungsperspektive einen bestimmten Grund, warum einer dieser Betreiber den anderen nicht einfach anruft?
möglich Duplikat von [Scala Liste Verkettung, ::: vs ++] (http://StackOverflow.com/Questions/6559996/Scala-list-Concatenation-VS) –