在 Scala 中,具有 main 方法的多个对象可以存在于单个文件中并单独运行这背后的原因是什么?

问题描述

我在 Scala 3 中的单个文件中编写了以下代码

@main def main11 =
  println("main11 printed something")

object Main10 extends App {
  println("Main10 Executed !!".toupperCase())
  main11
}

object Main2  {
  def main(args: Array[String]): Unit = {
    println("Main2 can run too !!".toupperCase())
    Main10
  }
}

它编译得很好,我可以在 IDE 中运行这些 main11 Main2 Main10 中的任何一个

这是什么原因?

例如

main11 输出

main11 printed something

Main2 输出

 MAIN2 CAN RUN TOO !!
 MAIN10 EXECUTED !!
 main11 printed something

通常在其他语言中,我会在 1 个文件中看到 1 个主类。

解决方法

Scala 有惯用的概念,需要在同一个文件中包含多个类/对象/特征,例如

  • 伴随对象
  • 代数数据类型

然而,一般来说,在同一个文件中定义任意多个类/对象/特征并不是最佳实践,除非它们紧密相关。您的对象碰巧每个都有一个 main 方法这一事实并不相关,因为它只是被视为常规方法。