一些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()
}
你可以看到所有方法都在抛出错误!
但为什么我的代码运行良好?
答案 0 :(得分:1)
数组是JVM
上的原始类型。为了在Scala的统一类型系统中表示它们,名义上不区分“原语”和其他类型,有一个虚拟类声明了数组的接口。永远不会调用此类的实际方法,而是调用基本数组类型的相应方法。