Scala дает мне "незаконное начало определения"
Я пытаюсь начать работу с Scala и не могу выбраться из стартового сервера.
Файл, состоящий из строки
package x
дает мне
ошибка: незаконный запуск определения
Независимо от того, что такое x, и независимо от того, где я помещаю файл (у меня была теория, что мне пришлось поместить файл в иерархию каталогов, чтобы он соответствовал определению пакета, но нет). Я получаю ту же ошибку с примером кода с веб-сайта и с REPL.
Ответы
Ответ 1
Похоже, вы пытаетесь объявить членство package
в Scala script (запустить с помощью команды scala
) или в REPL.
Только файлы, определяющие только классы и объекты, скомпилированные с помощью scalac
, могут быть определены как принадлежащие к пакету.
Когда вы запускаете код в сеансе script или REPL, за кулисами он фактически компилируется внутри метода объекта, в пределах которого объявление пакета не будет законным.
Ответ 2
Так как Scala 2.11.0-M7 вы можете использовать :paste -raw
(исправить проблему SI-5299). Эта опция позволяет определять пакеты в REPL:
scala> :paste -raw
// Entering paste mode (ctrl-D to finish)
package Foo
class Bar
// Exiting paste mode, now interpreting.
scala> import Foo._
import Foo._
scala> new Bar
res1: Foo.Bar = [email protected]
Ответ 3
У меня такая же проблема. Я решил это, импортировав import packageName._
вместо объявления листа в пакете.
Ответ 4
У меня была такая же проблема, когда я выполнял программу Scala, например. "Game.scala" с терминала.
Компиляция прошла нормально, при запуске кода была показана ошибка, см. Ниже
Rong неправильно:
[email protected]:~$scala Game.scala
/home/$USER/.../src/ul/org/bloxorz/Game.scala:1: error: illegal start of definition
package ul.org.bloxorz
Scala-код должен вызываться из терминала почти так же, как Java-код (вы должны дать ему полное имя класса, а не имя файла, как я делал в первом примере)
☑ правильно:
[email protected]:~$scala ul.org.bloxorz.Game
Ответ 5
Я не получаю эту ошибку. Как вы это компилируете? И, кстати, какой веб-сайт? Что касается REPL, он не принимает пакеты. Пакеты предназначены только для скомпилированного кода.