我正在尝试开始使用Scala并且无法离开起跑门。
由行
组成的文件package x
给了我
错误:非法启动定义
无论x是什么,无论我把文件放在哪里(我有一个理论,我必须将文件放在目录层次结构中以匹配包定义,但没有)。我从网站和REPL的示例代码中得到了同样的错误。
答案 0 :(得分:67)
看起来您正在尝试在Scala脚本(使用package
命令运行)或REPL中声明scala
成员资格。
只有定义了使用scalac
编译的类和对象的文件才可以定义为属于包。
当你在脚本或REPL会话中运行代码时,它在幕后实际上是在一个对象的方法中编译的,在这个范围内,一个包声明是不合法的。
答案 1 :(得分:23)
自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 = Foo.Bar@3ee2cf81
答案 2 :(得分:2)
我遇到了同样的问题。我通过导入import packageName._
而不是在包中声明工作表来解决它。
答案 3 :(得分:0)
在执行scala程序时,我遇到了同样的问题。终端上的“ Game.scala” 。
编译部分没问题,运行代码时显示错误,请参见下文
user@pc:~$scala Game.scala
/home/$USER/.../src/ul/org/bloxorz/Game.scala:1: error: illegal start of definition
package ul.org.bloxorz
应该从终端调用标量代码,与Java代码几乎一样(您应该给它一个完全限定的类名,而不是像我在第一个示例中那样的文件名)
user@pc:~$scala ul.org.bloxorz.Game
答案 4 :(得分:-1)
我没有收到此错误。你怎么编译这个?顺便问一下,什么网站?对于REPL,它不接受包。包仅用于编译代码。