Подтвердить что ты не робот

Scala дает мне "незаконное начало определения"

Я пытаюсь начать работу с Scala и не могу выбраться из стартового сервера.

Файл, состоящий из строки

package x

дает мне

ошибка: незаконный запуск определения

Независимо от того, что такое x, и независимо от того, где я помещаю файл (у меня была теория, что мне пришлось поместить файл в иерархию каталогов, чтобы он соответствовал определению пакета, но нет). Я получаю ту же ошибку с примером кода с веб-сайта и с REPL.

4b9b3361

Ответ 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, он не принимает пакеты. Пакеты предназначены только для скомпилированного кода.