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.::が存在する必要がある理由がわかりません。
更新: 同じ質問が既に出されています。::コメントでは、歴史的な理由からこの方法が存在することが示唆されています。