1
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 つの演算子の違いは何ですか?

4

2 に答える 2

0

クラス+:::定義されたメソッドには、次の実装があります。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.::が存在する必要がある理由がわかりません。

更新: 同じ質問が既に出されています。::コメントでは、歴史的な理由からこの方法が存在することが示唆されています。

于 2013-03-06T07:50:01.740 に答える