给定两个列表a
and , andb
有什么区别?我怀疑其中一个运算符会简单地调用另一个,但实际上,实现看起来完全不同: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
?从实现的角度来看,这些运算符中的一个不简单地调用另一个是否有特定的原因?