5

xソースファイルを含むフォルダを作成しpackage.scalaました。このファイルには、次のコードが含まれています。

package x

package object y
{
  trait A

  case class B extends A
}

Eclipseはコンパイルエラーを表示します:illegal cyclic reference involving object y

これが何を意味するのかよくわかりません。通常のクラスを定義(削除case)しようとすると、エラーメッセージが消えます。別の解決策は、パッケージオブジェクトの代わりに通常のオブジェクトを使用することです。

package x

object y
{
  trait A

  case class B extends A
}

サイクリックリファレンスはどこにありますか?そして、どうすればそれを削除できますか?私が理解している限り、パッケージオブジェクト内でトレイトとそのケースサブクラスを定義することはできません。しかし、私はこの制限がどこから来ているのかについてはわかりません。

4

1 に答える 1

2

PedroFuriaが言うように、これはバグですが、これらの状況でバグに関連する問題を調べることは常に良いことです。具体的には、2011年9月に結論が戻ってきました。

パッケージオブジェクトでのクラスの定義は、Scalaコンパイラ自体では半分しか機能していません。これを回避するには、適切なディレクトリでクラスを定義します。これがすぐに完全にサポートされるとは思えません。

したがって、簡単に置き換えることができると指摘しているこの関連する問題を参照するのが最善です。

package object mypkg {
  class MyClass
}

次のように:

package mypkg {
  class MyClass
}

これはEclipse/EclipseIDEで動作します。

于 2014-01-29T15:39:21.890 に答える