scala> 3 :: List(1,2)
res5: List[Int] = List(3, 1, 2)
scala> 3 +: List(1,2)
res6: List[Int] = List(3, 1, 2)
この 2 つの演算子の違いは何ですか?
scala> 3 :: List(1,2)
res5: List[Int] = List(3, 1, 2)
scala> 3 +: List(1,2)
res6: List[Int] = List(3, 1, 2)
この 2 つの演算子の違いは何ですか?
クラス+:
で::
定義されたメソッドには、次の実装があります。List
override def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That = bf match {
case _: List.GenericCanBuildFrom[_] => (elem :: this).asInstanceOf[That]
case _ => super.+:(elem)(bf)
}
def ::[B >: A] (x: B): List[B] =
new scala.collection.immutable.::(x, this)
メソッド+:
は から継承されているため、存在する必要がありますSeqLike
。ペロトムが言うように、これはより一般的な方法です。
ただし、メソッドList.::
が存在する必要がある理由がわかりません。
更新: 同じ質問が既に出されています。::
コメントでは、歴史的な理由からこの方法が存在することが示唆されています。