:::
scala和++
operator有什么区别?根据文档,行为是相同的。
问问题
7444 次
3 回答
37
他们做同样的事情,除了++
可以与任何一起使用Traversable
并且:::
只能与列表一起使用。此外,以 结尾的方法:
在右侧的对象上调用,因此:::
' 的参数是前缀,而++
' 的参数是后缀。
于 2012-10-16T15:44:49.980 回答
14
行为是相同的。不同之处在于他们接受的类型。
:::
只接受一个List
. ++
接受是一系列类型,[B >: A, That]
意思是++
接受一个类型,其下限是List
,上限是GenTraversableOnce[B]
,类型介于两者之间。
因此,在类型层次图中,扩展 traitGenTraversableOnce
并且是超类型的类List
是有效的
使用 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 关于关联性的说明。
于 2012-10-16T16:36:51.933 回答
0
@lukas,这篇文章也可能有用。如何从 Scala API for List 解释 :::? 其他人对该帖子(我的)中的问题给出的答案有助于理解 ::: 方法的作用,尽管它没有与 ++ 方法进行对比。但我认为包括这个可能会有所帮助。
于 2012-10-16T16:53:21.923 回答