Scala出现expected class or object definition报错如何解决?
问题根因
Scala 2 标准源文件要求所有顶层语句必须包裹在class/object/trait结构中,不允许直接在顶层编写变量定义、方法调用这类执行语句,这是你报错的核心原因。
代码存在的具体问题
val matrix变量定义、squaresHaveNoDuplicates(matrix)方法调用直接写在了Main对象外部,属于非法的顶层执行语句matrix数组定义缺少闭合的右括号),语法不完整squaresHaveNoDuplicates是Main对象的成员方法,直接调用需要加Main.前缀,或把执行逻辑放在Main对象内部
REPL运行报错说明
你在REPL中运行简单语句也报错,是因为Scala 2 REPL默认逐行解析代码,粘贴多行代码时如果没有开启粘贴模式,会逐行执行解析,前面的object定义完成后,后续行就会触发顶层语句非法的报错。
修正后的可运行代码
object Main extends App { def squaresHaveNoDuplicates(matrix: Array[Array[Int]]) = { val rowBlocks = matrix.grouped(3).toArray println(rowBlocks.mkString("Array(", ", ", ")")) } val matrix= Array( Array(0, 5, 0, 3, 0, 9, 0, 2, 6), Array(3, 8, 9, 4, 2, 0, 1, 5, 7), Array(4, 0, 6, 1, 0, 0, 0, 8, 9), Array(0, 1, 3, 7, 9, 8, 0, 0, 4), Array(0, 0, 8, 0, 0, 0, 5, 0, 0), Array(0, 6, 0, 0, 0, 3, 0, 0, 0), Array(0, 0, 1, 9, 3, 0, 0, 4, 0), Array(9, 3, 5, 6, 4, 0, 8, 0, 1), Array(0, 0, 2, 8, 7, 0, 0, 0, 5) ) squaresHaveNoDuplicates(matrix) }
REPL运行操作指南
- 粘贴多行代码前先输入
:paste进入粘贴模式,粘贴完代码后按Ctrl+D触发统一解析执行即可避免报错 - 如果REPL状态异常,可输入
:reset重置状态后再重试运行代码
内容的提问来源于stack exchange,提问作者Shiva ParsaRad
相关产品推荐
相关产品推荐

