List :::运算符和++之间的区别

时间:2012-10-16 15:38:39

标签: list scala operators

scala :::++运算符之间有什么区别?根据{{​​3}},行为是一样的。

3 个答案:

答案 0 :(得分:34)

他们做同样的事情,除了++可以与任何Traversable一起使用,而:::只能与列表一起使用。此外,在右边的对象上调用以:结尾的方法,因此:::的参数是前缀,而++的参数是后缀。

答案 1 :(得分:14)

行为是一样的。不同之处在于他们接受的类型。

:::只接受List++接受来自[B >: A, That]的一系列类型,意味着++将接受下限为List且上限为GenTraversableOnce[B]且类型介于两者之间的类型

因此,在类型层次结构图中,扩展trait GenTraversableOnce并且是List的超类型的类是有效的

List type hierarchy

示例使用List和LinkedList显示此行为。:

scala> val l = List(1,2,3)
l: List[Int] = List(1, 2, 3)

scala> val l2 = List(4,5,6)
l2: List[Int] = List(4, 5, 6)

scala> l ++ l2
res0: List[Int] = List(1, 2, 3, 4, 5, 6)

scala> l ::: l2
res1: List[Int] = List(1, 2, 3, 4, 5, 6)

scala> import scala.collection.mutable.LinkedList
import scala.collection.mutable.LinkedList

scala> val ll = LinkedList(1,2,3)
ll: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3)

scala> ll ++ l2
res2: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5, 6)

scala> ll ::: l2
<console>:11: error: type mismatch;
found   : scala.collection.mutable.LinkedList[Int]
required: List[?]
          ll ::: l2

另外,请参阅Kim关于关联性的说明。

答案 2 :(得分:0)

@lukas,这篇文章也许有用。 How to interpret ::: from the Scala API for List? 其他人对该帖子(我的)中的问题给出的答案有助于理解:::方法的作用,尽管它没有与++方法形成对比。但我认为包括这可能会有所帮助。