2012-12-24 67 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 –