2013-03-02 22 views
6

Ich schreibe ein kleines Simulationsprogramm in Scala. Es ist Akteur-basiert, also habe ich eine Datei messages.scala erstellt, die alle Nachrichten enthält, die im System gültig sind.Mehrdeutige Importe in Scala

Außerhalb von diesem habe ich eine Verwaltungskomponente, management.scala und eine Datei, die die Knoten und Links Klassen nodes.scala definiert. Verwaltungs- und Knotendateien sowohl import sim.messages._ als auch die Verwaltung tun import sim.nodes._, da es Dinge aus dieser Datei instanziieren kann. Das Problem kommt mit einem Nachrichtentyp Tick, der sowohl von management.scala als auch nodes.scala verwendet wird. Bei der Management-Komponente kompilieren, erhalte ich:

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

Ich habe versucht, den Import von Nachrichten in der Management-Komponente zu entfernen, da wurden sie offenbar bereits in diesem Umfang importiert, aber dann konnten sie sie nicht mehr finden. Ideen?

Antwort

8

Versuchen

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

und/oder

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

Natürlich werden Sie die Verweise auf Tick mit dem rechten umbenennen.

+0

Die Logik dahinter ist nur, um eine der Referenzen aus dem Weg zu bekommen, indem Sie es umbenennen? Ich habe die Node-Version Ihres Codes verwendet, so dass ich weiterhin "Tick" aus Nachrichten verwenden konnte, und ich bekomme immer noch den gleichen Fehler. Vielleicht, weil ich immer noch unterstreiche, alles zu importieren? – Alex

+2

Inspiriert von Ihrer Idee habe ich "import sim.messages._" und "import sim.nodes. {Tick => _, _}" entwickelt. Scheint so, als würde man Tick auf nichts setzen und dann den Rest importieren . Dies scheint der richtige Weg zu sein, denn nach etwas, das ich gerade gelesen habe, kann es nicht rückgängig gemacht werden, wenn es einmal importiert wurde. Daher wird die Tick-Definition, die ich nicht möchte, in zwei Schritten importiert, und dann importiere ich sie erneut unter einem anderen Alias. Wie auch immer, jetzt sortiert, danke für die Hilfe. – Alex