Scala-IDE или странное поведение импорта Scala

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

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

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

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

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

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

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


person noncom    schedule 01.01.2012    source источник


Ответы (2)


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

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

    import _root_.main.game.Game
    

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

person Alexey Romanov    schedule 01.01.2012

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

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

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

person Daniel C. Sobral    schedule 01.01.2012
comment
Хм, интересно. Никогда не вникал в это в Java ... так как я думаю, что методы Java не являются первоклассными значениями. Спасибо! Как приятно, что добрые люди помогают разобраться.. С.О. нельзя признать принятыми два и более ответов, так как иногда они действительно сливаются в один, дополняя друг друга. Я выбираю ответ Алексея как более общий, а также он относится и к вашему ответу. - person noncom; 02.01.2012
comment
@noncom В Java нет относительного импорта, не так ли? - person Daniel C. Sobral; 02.01.2012