Scala-IDE или странное импортное поведение Scala - PullRequest
1 голос
/ 01 января 2012

Я работаю над небольшим проектом Scala. У меня следующая проблема с 'import':

Если в верхней части одного из моих файлов я импортирую две вещи с этими командами:

import main.Main._
import main.game.Game
       ^^^^

это выдает мне следующее сообщение об ошибке в подчеркнутом «главном» слове: «пропущены аргументы для метода main в объекте Main; следуйте этому методу с помощью« _ », если вы хотите рассматривать его как частично примененную функцию», что довольно странно тем более, что это просто оператор импорта. И, естественно, нет фактического импорта. Сначала я снова подумал о причудах вывода с запятой, но это не так. Если я поменяю две строки и напишу так:

import main.game.Game
import main.Main._

тогда все в порядке.

Может ли кто-нибудь пролить свет на это? Что-то особенное в Скале?

Ответы [ 2 ]

8 голосов
/ 01 января 2012

Предположительно, у вас есть метод main в object Main. Таким образом, после import main.Main._ main ссылается на этот метод вместо main пакета. Вы можете избежать этого несколькими способами:

  1. Изменить порядок импорта, как в вопросе.
  2. Не импортируйте метод main, как предполагает ответ Даниэля С. Собрала.
  3. Явно говорю, что вы хотите пакет верхнего уровня main:

    import _root_.main.game.Game
    

Следуя обычному соглашению об именах пакетов Java , следует избегать этой проблемы в большинстве случаев, поскольку маловероятно, что члены (или подпакеты) будут называться com или org (хотя net может быть проблема).

6 голосов
/ 01 января 2012

У вас есть метод с именем main внутри main.Main, не так ли? Ну, так как вы импортировали его, он теперь затеняет пакет с именем main. Вы можете попробовать это, чтобы подтвердить:

import main.Main.{main => _, _}
import main.game.Game

Это исключит main из импорта.

...