2 つのリストa
とが与えられた場合、とb
の違いは何ですか? これらの演算子の 1 つが単に他の演算子を呼び出すのではないかと思いましたが、実際には、実装は完全に異なっているように見えます。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
? 実装の観点から、これらの演算子の 1 つが単に他の演算子を呼び出さない特定の理由はありますか?