0
一些Scala代碼看起來非常正常:scala的數組是如何工作的,而它的implements只是拋出錯誤?
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()
}
你可以看到所有的方法都扔錯誤!
但爲什麼我的代碼運行良好?
我想這是像原始類型('Int','Double')的情況之一。編譯器將'Array'作爲一個普通的對象呈現給你,但它有特殊的編譯規則。 –
斯卡拉編譯器在幕後做了許多魔術。原始類型和數組只是Scala中的「視圖」,由「Int」代表,它是「兄弟」和「數組」。你可以忽略源代碼。 –
似乎編譯器中有魔術。很遺憾,我找不到任何文章來解釋如何在快速搜索google之後使用scala編寫數組 – Freewind