給定兩個清單a
和b
,a ::: b
和a ++ b
有什麼區別?我懷疑這些運營商的人會簡單地撥打對方,但事實上,這些實現看起來完全不同:列表中的:::和++有什麼區別?
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)
}
從使用的角度來看,我寧願a ::: b
或a ++ b
?從實施的角度來看,這些運營商之一是不是簡單地打電話給其他公司的具體原因?
[Scala list concatenation,::: vs ++]的可能重複(http://stackoverflow.com/questions/6559996/scala-list-concatenation-vs) – 2013-04-11 14:02:53