【问题标题】:Scala code is compiling but returning a run time error.Scala 代码正在编译但返回运行时错误。
【发布时间】:2012-12-24 05:18:08
【问题描述】:

以下代码编译正常,但在运行时返回错误。我认为我对 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)

【问题讨论】:

  • 你是在 Windows 上编译的吗?
  • 您是否有默认的 Mac OS 安装选项以不区分大小写?

标签: scala runtime traits


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2020-10-10
    • 2019-11-24
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多