错误的前向引用,但 Scala 脚本运行完美

Wrong Forward Reference yet Scala script runs perfectly

我正在使用最新版本的 IntelliJ 的 Scala 插件并有以下这段代码,其目的是允许枚举 class Count:

class Count() {
  val id = Count.id()
  override def toString = s"Count$id"
}

object Count {
  var n = -1
  def id() = { n += 1; n }
}

println(Vector(new Count, new Count, new Count))

当引用伴随对象的方法 id() 时,IntelliJ 给我一个前向引用错误,但脚本编译完美,产生输出 Vector(Count0, Count1, Count2)。事实上,我只是在 运行 脚本成功后偶然发现了这个错误。给出了什么?

Scala 工作表尝试分别编译每条指令。 如果您将所有代码包装到一个对象中(以强制 scala 编译器整体处理整个代码)- 不会有这样的异常:

object a {

  class Count() {
    val id = Count.id()

    override def toString = s"Count$id"
  }

  object Count {
    var n = -1

    def id() = {
      n += 1; n
    }
  }

  println(Vector(new Count, new Count, new Count))

}