2013-03-02 2 views
6

Piszę mały program symulacyjny w Scali. Jest oparty na aktorach, dlatego utworzyłem plik messages.scala zawierający wszystkie komunikaty, które są prawidłowe w systemie.Niejednoznaczny import w Scali

Poza tym mam komponent zarządzania, management.scala oraz plik definiujący klasy węzłów i łączy nodes.scala. Zarządzanie i pliki węzłów zarówno import sim.messages._, a następnie zarządzanie ma import sim.nodes._, ponieważ musi być w stanie tworzyć instancje z tego pliku.

Problem dotyczy jednego typu komunikatu Tick używanego zarówno przez management.scala, jak i nodes.scala. Po kompilacji komponent zarządzania, otrzymuję:

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

Próbowałem usunięcie import komunikatów w składowej zarządzania, ponieważ zostały najwyraźniej już przywiezione do tego zakresu, ale potem nie mogli znaleźć ich więcej. Pomysły?

Odpowiedz

8

Spróbuj

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

i/lub

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

Oczywiście, trzeba będzie zmienić nazwę odniesień do Tick z prawej.

+0

Logika stojąca za tym polega na usunięciu jednego z odwołań poprzez zmianę jego nazwy? Użyłem wersji kodu twojego węzła, dzięki czemu mogłem nadal używać "Tick" z wiadomości i nadal otrzymuję ten sam błąd. Potencjalnie, ponieważ nadal robię podkreślenia, by zaimportować wszystko? – Alex

+2

czerpiąc inspirację z Twojego pomysłu, wymyśliłem "import sim.messages._" i "import sim.nodes. {Tick => _, _}" Wydaje się, że można zrobić lewę, przypisując Tick do niczego, a następnie importując resztę . Wydaje się, że jest to odpowiedni sposób, ponieważ zgodnie z tym, co właśnie przeczytałem, po zaimportowaniu czegoś nie można go cofnąć. Dlatego wykonanie go w dwóch krokach powoduje zaimportowanie definicji Tick, której nie chcę, a następnie zaimportuję ją ponownie pod innym aliasem. W każdym razie, posortowane, dzięki za pomoc. – Alex