You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:15:02