2

IntelliJ の Scala プラグインの最新バージョンを使用しており、次のコードを使用しています。その目的は、クラスのインスタンスを列挙できるようにすることです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 ワークシートは、各命令を個別にコンパイルしようとします。すべてのコードを 1 つのオブジェクトにラップする場合 (コード全体で 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 に答える