【问题标题】:How is scala.Array a Seq?scala.Array 如何成为 Seq?
【发布时间】:2011-05-29 01:26:50
【问题描述】:

我是一名优秀的 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] 特征。我错过了什么?

【问题讨论】:

    标签: scala


    【解决方案1】:

    您缺少隐式。在 Stack Overflow 上有一个关于 implicitsfew questions。在您正在阅读的 PDF 中,请参阅第 15 章,从第 113 页开始。在 Scaladoc 上,您将看到对象 scala.Predef 的相关隐式 - 只需查找以 Array 作为输入参数并返回的隐式方法别的东西。

    PS:哎呀,上面写着ArraySeq!实际上,在 Scala 2.8 之前可能就是这种情况,但从那时起,Array 就是 Java Array,纯粹而简单。

    【讨论】:

      【解决方案2】:

      在 Predefs 中有一个到 WrappedArray 的隐式转换。见Scala Arrays vs Vectors

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多