斯卡拉给我"非法开始定义"

Mal*_*lio 56 scala

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

由该行组成的文件

package x
Run Code Online (Sandbox Code Playgroud)

给我

错误:非法启动定义

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

Ben*_*mes 71

看起来您正在尝试package在Scala脚本(使用scala命令运行)或REPL中声明成员资格.

只有定义了编译的类和对象的文件才scalac可以定义为属于包.

当您在脚本或REPL会话中运行代码时,它在幕后实际上是在对象的方法内编译的,在该范围内,包声明是不合法的.

  • 那么你如何运行scala下载档案的'examples'文件夹中的代码呢?他们中的大多数都有一个"包示例"行,内容符合我所相信的规则.我可以``scalac``他们,但用例如``scala -classpath运行它们.sort``给了我一个``java.lang.NoClassDefFoundError`` !? (11认同)

qtw*_*two 24

从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
Run Code Online (Sandbox Code Playgroud)