2012-11-16 6 views
5

xのソースファイルpackage.scalaを作成しました。 ファイルには、次のコードが含まれていますEclipse/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 
} 

循環参照がある:別の解決策ではなく、パッケージオブジェクトの正常なオブジェクトを使用するのですか?どうすれば削除できますか?私が理解する限り、私は、パッケージオブジェクトの中でそれの特性と事例サブクラスを定義することはできません。しかし、私はこの制限がどこから来ているのかを知らない。

+1

私もこの問題を経験しました。SBTで 'package object'バージョンをコンパイルするとうまくいきます。だから、それはEclipseのバグです。 – pedrofurla

+0

@pedrofurla:Ok。その後、バグが修正されるまで待つだけです。少なくとも、自分のコードが正しいことは分かっています。ありがとう。 – Giorgio

答えて

2

PedroFuriaはこれはバグだと言っていますが、このような状況ではthe issue associated with the bugを見るのは常に良いことです。具体的には、結論は2011年9月に戻っています。

パッケージオブジェクト内のクラスの定義は、Scalaコンパイラ自体でのみ行われています。これを回避するには、正しいディレクトリにクラスを定義します。私はこれがいつでも完全にサポートされるのではないかと疑う。

だから指摘し、このrelated issueを参照することが最善の交換が容易である:以下と

package object mypkg { 
    class MyClass 
} 

:エクリプス/ EclipseIDEで動作します

package mypkg { 
    class MyClass 
}