2013-03-02 10 views
6

私はScalaで小さなシミュレーションプログラムを書いています。それは俳優に基づいているので、システム内で有効なすべてのメッセージを含むファイルmessages.scalaを作成しました。Scalaのあいまいなインポート

これ以外には、管理コンポーネント、management.scalaと、ノードとリンククラスを定義するファイルnodes.scalaがあります。管理ファイルとノードファイルは両方ともimport sim.messages._であり、管理はimport sim.nodes._です。そのファイルから物事をインスタンス化する必要があるからです。

この問題のメッセージタイプはTickで、management.scalanodes.scalaの両方で使用されています。管理コンポーネントをコンパイルすると、私が手:

error: reference to Tick is ambiguous; 
it is imported twice in the same scope by 
import sim.nodes._ 
and import sim.messages._ 

私は、彼らは明らかにすでにこのスコープの中に輸入されたため、管理コンポーネントでメッセージのインポートを削除しようとしたが、その後、彼らはもはやそれらを見つけることができませんでした。アイデア?

答えて

8

はもちろん

import sim.nodes._ 
import sim.nodes.{ Tick => NodesTick } 

および/または

import sim.messages._ 
import sim.messages.{ Tick => MessagesTick } 

を試してみてください、あなたは右の1でTickへの参照の名前を変更する必要があります。

+0

これの背後にあるロジックは、名前を変更して参照のうちの1つを取得するだけですか?私はあなたのコードのノードバージョンを使用して、メッセージから「Tick」をそのまま使用することができ、私は同じエラーを受け取ります。私はまだすべてをインポートするためにアンダースコアを行っているからでしょうか? – Alex

+2

あなたのアイデアからインスピレーションを得て、私は "import sim.messages._"と "sim.nodesをインポートする{Tick => _、_}"と思っています。 。これは適切な方法であると思われます。なぜなら、私が読んだことによると、何かがインポートされると、元に戻すことはできません。したがって、それを2つのステップで実行すると、私が必要としないTick定義がインポートされ、別の別名の下で再びインポートされます。とにかく、ソートされました、助けてくれてありがとう。 – Alex

関連する問題