scala的数组如何工作,而它的工具只是抛出错误?

时间:2014-06-29 09:44:43

标签: arrays scala

一些Scala代码非常正常:

val array = Array("aaa")
array.update(0, "bbb")
println(array.toList)

打印哪些:

List(bbb)

但在查看Array的源代码之前:

final class Array[T](_length: Int) extends java.io.Serializable with java.lang.Cloneable {

  def length: Int = throw new Error()

  def apply(i: Int): T = throw new Error()

  def update(i: Int, x: T) { throw new Error() }

  override def clone(): Array[T] = throw new Error()
}

你可以看到所有方法都在抛出错误!

但为什么我的代码运行良好?

1 个答案:

答案 0 :(得分:1)

数组是JVM上的原始类型。为了在Scala的统一类型系统中表示它们,名义上不区分“原语”和其他类型,有一个虚拟类声明了数组的接口。永远不会调用此类的实际方法,而是调用基本数组类型的相应方法。

More informationFor the JVM