2

我正在使用 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)。事实上,我只是在成功运行脚本后偶然注意到错误。是什么赋予了?

4

1 回答 1

5

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))

}
于 2015-11-02T08:06:01.183 回答