scala.Array怎么样?

时间:2011-05-29 01:26:51

标签: scala

我是一名强大的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
}

我的问题不在于语法或任何内容,但我对过滤函数的来源感到困惑。根据PDF,它说它来自Seq [T]类,并且所有数组都是Seq [T]的实例。这一切都很好,花花公子,在阅读PDF时,我很满意,也是一位非常开心的新手Scala开发人员。但后来我深入挖掘并开始查看scaladoc for Array[T]以及Array [T]的源代码,我看不到Array [T]类如何扩展或继承Seq [T]特性。我错过了什么?

2 个答案:

答案 0 :(得分:10)

你错失了暗示。 Stack Overflow上有few questions关于implicits。在您正在阅读的PDF上,请参阅第113页,从第113页开始。在Scaladoc上,您将看到对象scala.Predef上的相关含义 - 只需查找以Array为基础的隐式方法输入参数并返回其他内容。

PS:Yikes,它说ArraySeq!实际上,在Scala 2.8之前可能就是这种情况,但从那时起,Array就是一个纯粹而简单的Java Array

答案 1 :(得分:3)

在Predefs中隐式转换为WrappedArray。请参阅Scala Arrays vs Vectors