原文链接 http://www.ituring.com.cn/article/131439
本文翻译自:Scala snippets 2: List symbol magic fairjm@ituring
Scala的每一个操作符都可以是函数,所以重载操作符(实际上不是真正的重载操作符,毕竟操作符都已经是方法了)
是一件非常简单并且在很多库中都能看见的事。在这个片段中,我们将探讨一些让列表操作更加简单的方法重载。
让我们从++
操作符开始。首先,就像我们一直做的那样,让我们来创建一个列表:
scala> val list = 0 until 10 toList
list: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
scala> val list2 = 10 to 0 by -1 toList
list2: List[Int] = List(10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
然后大致浏览下来自 http://www.scala-lang.org/api/2.11.1/index.html#scala.collection.immutable.List 的一些操作:
第一个操作符是++
。我们可以用这个操作符把两个列表连接在一起,并且返回一个新的列表:
scala> val list3 = list ++ list2
list3: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
scala> val list3 = list2 ++ list
list3: List[Int] = List(10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
注意你并不需要保证列表是相同类型的。Scala会自动选择最相关的父类:
scala> val list1 = 0 to 10 toList
list1: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> val list2 = 10 to 0 by -1 toList
list2: List[Int] = List(10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
scala> val list3 = list1.asInstanceOf[List[Double]]
list3: List[Double] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> list3 ++ list2
res4: List[AnyVal] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,