scala> 3 :: List(1,2)
res5: List[Int] = List(3, 1, 2)
scala> 3 +: List(1,2)
res6: List[Int] = List(3, 1, 2)
这两个运营商之间的区别是什么?
答案 0 :(得分:6)
不同之处在于+:
是::
的抽象,它在广义Seq
而非List
s上运行。例如,+:
也适用于Stream
s:
scala> 3 +: Stream(1,2)
res0: scala.collection.immutable.Stream[Int] = Stream(3, ?)
与List
一起使用时,它在功能上与::
相同。
答案 1 :(得分:0)
+:
类定义的方法::
和List
包含following implementations,
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
继承而来的。正如pelotom所说,这是更普遍的方法。
但是,我不确定为什么方法List.::
需要存在。
更新:同样的问题有already been asked。在评论中,建议方法::
由于历史原因而存在。