2014-06-29 25 views
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() 
} 

你可以看到所有的方法都扔錯誤!

但爲什麼我的代碼運行良好?

+2

我想這是像原始類型('Int','Double')的情況之一。編譯器將'Array'作爲一個普通的對象呈現給你,但它有特殊的編譯規則。 –

+0

斯卡拉編譯器在幕後做了許多魔術。原始類型和數組只是Scala中的「視圖」,由「Int」代表,它是「兄弟」和「數組」。你可以忽略源代碼。 –

+0

似乎編譯器中有魔術。很遺憾,我找不到任何文章來解釋如何在快速搜索google之後使用scala編寫數組 – Freewind

回答

1

數組是JVM上的原始類型。爲了將它們表示在Scala的統一類型系統中,名義上不區分「原語」和其他類型,有一個聲明數組接口的虛擬類。永遠不會調用這個類的實際方法,而是調用基本數組類型的相應方法。

More informationFor the JVM

相關問題