2011-10-29 17 views
8

Mam wielo projektowy obszar roboczy Scala w czasie zaćmienia. Wydaje mi się, że jestem zaskoczony brakiem zrozumienia sposobu, w jaki Scala importuje paczki, ale po spędzeniu większej ilości czasu niż staram się przyznać, szukając rozwiązania, nie mogę wymyślić tego. Odtworzyłem problem w prostej 2 konfiguracji projektu.Import względnego pakietu Scala:

Projekt 1: com.foo.mathematics zawiera prostą klasę wektor

zawiera jeden plik:

package com.foo.mathematics  

class Vector2D(x : Double, y : Double) { 



    def length = math.sqrt(x*x + y*y) 

} 

Projekt 2: com.foo.analysis

package com.foo.analysis 

import com.foo.mathematics.Vector2D 



class Frame(xAxis : Vector2D, yAxis : Vector2D) { 



} 

Eclipse przedstawia błąd w wierszu importu, Otrzymuję komunikat o błędzie: Matematyka obiektu nie jest członkiem pakietu com.foo.

W widoku konspektu, moja wypowiedź import mówi tak:

com.foo.analysis.<error: <none>>.Vector2D 

Próbowałem zmieniając import do:

import mathematics.Vector2D 

import _root_.com.foo.mathematics.Vector2D 

ani jednego działa ...

Co mam brakujący?

+3

Spróbuj wyczyścić wszystkie projekty. Zbuduj projekt 1, następnie w projekcie 2 usuń wiersz importu, a następnie spróbuj wpisać 'import com.fo [CTRL-SPACE]', czy jest on kompletny? Jeśli tak, to ponownie wpisz CTRL-SPACE, czy oferuje on 'mathmatics' i' analysis'? – huynhjl

+0

Udało mi się to naprawić ciężkim użyciem _root_. – fbl

Odpowiedz

6

Zarówno import com.foo.mathmatics.Vector2D, jak i i powinny być w porządku. Najprawdopodobniej nie dodałeś pierwszego projektu do ścieżki budowania drugiego (zob. Build Path>Configure Build Path w menu kontekstowym), lub wyczyść drugi projekt (Project>Build Clean) po wprowadzeniu zmian w pierwszym projekcie.

(Również mathmatics wygląda jak typo dla mathematics, więc dokładnie sprawdzić, czy naprawdę mają taką samą nazwę w obu tych miejscach.)

pakiet względna import nie przychodzą do niego, po prostu znaczy, że mógł napisać to w ten sposób:

package com.foo 
package analysis 
import mathmatics.Vector2D 

class Frame(xAxis : Vector2D, yAxis : Vector2D) { 

} 
+0

Dzięki. Mylnie wpisałem moje oryginalne pytanie (niebezpieczeństwo zadawania pytań o 2:00), ale kod był w porządku. Udało mi się rozwiązać problem w moim "prawdziwym" projekcie, bardzo celowo stosując _root_ import do każdego importu w każdym pliku .scala w projektach. Po kilku cyklach czyszczenia/kompilacji, myślę, że działa. Inną rzeczą, którą musiałem zrobić od czasu do czasu, było usunięcie biblioteki zależnej z mojej ścieżki budowania, a następnie ponowne jej dodanie. Nie wiem, dlaczego to pomogło, ale tak się stało. – fbl

+0

'_root_' nie powinno być potrzebne, jeśli: 1) stosujesz normalną konwencję odwróconego adresu URL (jak ci się wydaje) i 2) nie masz pakietów o nazwach' com', 'org' itp. Zagnieżdżonych w innych pakietach. Dziwne ... Czy masz najnowszą wersję Scala IDE (2.0 beta 11)? Ostatni raz, gdy miałem takie problemy z zależnościami, było kilka wersji temu. –

+0

Mam najnowszą wersję Scala IDE i wersję Eclipse. Funkcja "_root_" nie jest taka zła, kiedy już wiesz, co musisz zrobić. Dzięki za pomoc. – fbl

Powiązane problemy