2013-03-02 21 views
6

Scala'da küçük bir simülasyon programı yazıyorum. Oyuncu tabanlı bu yüzden sistemde geçerli olan tüm iletileri içeren bir dosya messages.scala oluşturdum.Scala'da belirsiz ithalat

Bunun dışında bir yönetim bileşenim var, management.scala ve düğümleri tanımlayan ve nodes.scala sınıflarını bağlayan bir dosya var. Yönetim ve düğüm dosyaları hem import sim.messages._ hem de yönetim dosyaları import sim.nodes._ yapar, böylece bu dosyadan bir şeyler oluşturmak mümkün olması gerekir.

Sorun, management.scala ve nodes.scala tarafından kullanılan tek bir ileti türü Tick ile birlikte gelir. yönetim bileşeni derleme üzerine, ben alıyorum:

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

Onlar görünüşte zaten bu kapsama ithal beri yönetim bileşeninde mesajların ithalat çıkarmadan çalıştı ama sonra artık onları bulamadık. Fikirler?

cevap

8

doğru biriyle Tick başvuruları adlandırmak zorunda kalacak,

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

ve/veya Elbette

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

deneyin.

+0

Bunun arkasındaki mantık, sadece yeniden adlandırarak yoldan çıkan referanslardan birini almaktır. Kodunuzun düğümlerini kullanıyorum, böylece mesajlardan "Tikla" özelliğini kullanmaya devam edebildim ve hala aynı hatayı alıyorum. Potansiyel olarak, hepsini içe aktarmak için hala alt yapıyorum. – Alex

+2

fikrinizden ilham alarak, "import sim.messages._" ve "import sim.nodes. {Tick => _, _}" ile geldim. Tick'i hiçbir şeye atamak ve sonra geri kalanını içe aktararak hile yapmak gibi görünüyor . Bu, bunu yapmak için uygun bir yol gibi görünüyor, çünkü yeni okuduğum bir şeye göre, bir şey ithal edildikten sonra geri alınamaz. Bu nedenle, bunu iki adımda yapmak istemiyorum Tick tanımı içe aktarır ve daha sonra farklı bir takma ad altında yeniden içe aktarıyorum. Her neyse, şimdi sıralı, yardım için teşekkürler. – Alex