Scala:理解 ::: 运算符

6
应用 list1 ::: list2 运算符到两个列表上是否相当于将 list1 的所有内容附加到 list2 中?
scala> val a = List(1,2,3)
a: List[Int] = List(1, 2, 3)

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

scala> a:::b
res0: List[Int] = List(1, 2, 3, 4, 5, 6)

这个运算符还有其他用途吗?我在Scala文档中没有找到关于:::的任何信息,想知道它的正式名称和用法的范围。


是的,似乎只是一个列表连接 - 找到了它:http://www.tutorialspoint.com/scala/scala_lists.htm - 而且就是这样 - Random Dev
1
你看过ListAPI参考文档了吗? - Chris Martin
可能是[Scala列表连接,:::vs ++]的重复问题(https://dev59.com/DGw15IYBdhLWcg3whMI1)。 - The Archetypal Paul
1个回答

10

是的,它只是列表连接运算符。这些是以nil结尾的链接列表,因此从概念上讲,它实际上只是取第一个列表的最后一个cons单元,并将其指向第二个列表的头部而不是Nil。

如果您愿意,也可以使用更通用的++运算符代替:::。最终结果是相同的,但技术上您在不同的对象上进行调用。以:结尾的运算符在Scala中是右结合的,因此使用a ++ b与a.++(b)或基本上a.append(b)相同,而a ::: b右结合被转换为b.:::(a),可以读作b.prepend(a)。


这种简化有点不诚实,因为它隐藏了线性运行时间。 - Chris Martin
我并没有故意不讨论当前实现的性能,你提到性能对某些人来说是令人惊讶的,这是一个很好的观点。 - Shane Delmore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接