Scala代码正在编译但返回运行时错误。

时间:2012-12-24 05:18:08

标签: scala runtime traits

以下代码编译正常,但在运行时返回错误。我认为Scala中的Traits存在一些问题。在应用程序中调用addItem函数时,会出现问题。我只是好奇我做错了什么。错误消息在代码后面。

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)

1 个答案:

答案 0 :(得分:1)

事实证明,我对Heap,trait和heap,类的命名约定有些不对劲。我认为JVM正在以这样的方式编译名称,即特征Heap与类堆具有相同的名称。将名称从堆更改为h解决了问题。