Scala数组如何成为Seq?

8

我是一名有经验的Java开发者,最近开始利用空闲时间学习Scala。我正在阅读来自scala-lang.org的Scala by Example PDF,并对第一个示例中的快速排序算法感到困惑。以下是代码:

object QuickSort extends App {

  def sort(input: Array[Int]): Array[Int] = {
    if(input.length <= 1) input
    else
    {
      val pivot = input(input.length / 2)
      Array.concat(
          sort(input filter (pivot >)),
               input filter (pivot ==),
          sort(input filter (pivot <))
      )
    }
  }

  sort(Array(5, 4, 3, 2, 1)) foreach println
}

我的问题不在于语法或其他方面,而是我对filter函数的来源感到困惑。根据PDF文档,它来自Seq[T]类,而所有的数组都是Seq[T]的实例。当我阅读PDF时,一切都很好,我是一个非常满意和快乐的Scala新手开发者。但是,当我深入挖掘Array[T]的scaladoc和Array[T]的源代码时,我没有看到Array[T]类如何扩展或继承Seq[T] trait。我错过了什么?
2个回答

13
您缺少隐式参数。在 Stack Overflow 上有关于隐式参数的几个 问题。在您正在阅读的 PDF 中,请参阅第 15 章,从第 113 页开始阅读。在 Scaladoc 上,您会看到与对象 scala.Predef 相关的隐式参数 - 只需查找将 Array 作为输入参数并返回其他内容的隐式方法即可。
附注:天哪,它说Array是一个Seq!实际上,在 Scala 2.8 之前可能是这种情况,但自那以后,Array就是一个纯粹的 Java Array

3

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