斯卡拉给我“非法开始定义”

时间:2010-04-13 18:43:06

标签: scala

我正在尝试开始使用Scala并且无法离开起跑门。

由行

组成的文件
package x

给了我

  

错误:非法启动定义

无论x是什么,无论我把文件放在哪里(我有一个理论,我必须将文件放在目录层次结构中以匹配包定义,但没有)。我从网站和REPL的示例代码中得到了同样的错误。

5 个答案:

答案 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,它不接受包。包仅用于编译代码。