2012-12-24 41 views
0

下面的代碼編譯正常,但在運行時返回錯誤。我認爲在斯卡拉Traits中出現了一些問題。在應用程序中調用addItem函數時會出現問題。我只是好奇我做錯了什麼。錯誤消息在代碼後面。Scala代碼正在編譯,但返回運行時錯誤。

trait Heap { 
    def addItem(item: Int): Heap 
} 

case class heap(n: Int, 
       l: Heap, 
       r: Heap) extends Heap { 
    val node: Int = n 
    val left: Heap = l 
    val right: Heap = r 

    def addItem(item: Int): Heap = { 
    if (item < node) { 
     new heap(item,r.addItem(node),l) 
    } else { 
     new heap(node,l,r.addItem(node)) 
    } 
    } 
} 

case class leaf extends Heap { 
    def addItem(item: Int): Heap = { 
    new heap(item,new leaf,new leaf) 
    } 
} 




object test extends Application { 
    var a = new leaf 
    a.addItem(5); 
} 


Exception in thread "main" java.lang.NoClassDefFoundError: Heap (wrong name: heap) 
+0

你在Windows上編譯這個嗎? –

+0

我在Mac上運行 –

+0

您是否具有不區分大小寫的默認Mac OS安裝選項? –

回答

1

事實證明,我對Heap,特質和堆,類的命名約定有些錯誤。我認爲JVM是以這樣一種方式編譯名稱,即特質Heap與類堆一樣使用相同的名稱。將名稱從堆更改爲h解決了問題。

+2

https://issues.scala-lang.org/browse/SI-2909 –