2011-08-14 11 views
0

EclipseでScala 2.9.0.1を使用しています。奇妙なScalaコンパイラの動作を説明してください

は、私のようなもので、Scalaのクラス/特性の階層があります。より複雑な場合を除き

A.scala: trait A 
B.scala: trait B extends A 
C.scala: trait C extends B 

。例として投稿するには大きすぎます。

ので、CはAに間接的に依存しますが、私が変更した場合、Aは今C.

について何も知らない、私はどこにでもエラーが出るので、私は私の道を上に働きます。私は最終的にCで最後のエラーを修正した後、突然コンパイラは、Aはコンパイルできないと私に伝えます。 Aは決してCに依存しないので、これは論理的な意味を持たない。実際、私はそれがコンパイラのバグだと言います。これは数回今私に起こった、それは私が再びAを変更し、私の全体のクラス階層を再度変更しなければならないことを意味するので、非常にイライラです。

を信頼できるようにするためのScalaコンパイラ(Eclipse版)を入手する方法はありますか結果はありますか?私はこの行動を取る唯一の人ですか?

+0

EclipseのScala IDEはまだベータ版です。私は、デベロッパーチームがSBTスタイルのファイル依存追跡インフラストラクチャを組み込むことになると聞いています。これは恐らくこれらの問題を処理するでしょう。 –

+0

最新の夜間ビルドには、これらの問題に対処すべき実験的なビルドビルダーが含まれています。最新の夜間にインストールし、環境設定> Scala>コンパイラ>ビルドマネージャでsbtを選択します。そのような問題が残っている場合は、問題を示す小さなサンプルを作成し、Scala IDE issue trackerに報告してください。 –

+1

ScalaのどのバージョンのEclipseとEclipseプラグインを使用していますか?これは非常に重要なポイントです - スカラコンパイラのバグではなく、_eclipse plugin_バグがあります。 –

答えて

2

また、Scalaプログラムではエラーの「階層」を持つことができます。特定のコンパイルエラーは他のものが修正されるまで表示されません。 これは必ずしもコンパイラのバグではありません

1つの戦略は、インクリメンタルに変更することです(その他、これはおそらくトランクで修正されています古いのScala IDEビルダーのバグであると言う。):

  1. trait Aのコピーを作成し、trait A2としてください。
  2. A2に変更して、表示されるコンパイルエラーを修正します。これはまだA2に依存しないので簡単です。
  3. などB2を繰り返し、C2

すべてが動作したら、修正するもので、オリジナルの特徴を交換してください。リビジョン管理(私はgitを使う)は、このプロセスで非常に役に立ちます。私は便利

別の一般的な戦術は、2つの段階にデザインを分割することである。

  1. まず、私のコードだけのタイプを、空のすべてのメソッド本体を残します。途中で実際のコードが出る前に型エラーを修正する方がはるかに簡単です。

  2. 一度型が一貫すれば、複雑なコンパイルエラーを気にせずにメソッド定義を個別に記入することができます。

関連する問題