Scala 为什么args对于main是强制的

Scala 为什么args对于main是强制的,scala,Scala,如果我使用下面这样的方法,考虑到我不需要接受参数,它不会在eclipse中检测Scala object HelloWorld { def main(): Unit = { println("Hello Scala!!!") } } 它适用于args:Array[String] object HelloWorld { def main(args: Array[String]): Unit = { println("Hello Scala!!!") } } 这只是

如果我使用下面这样的方法,考虑到我不需要接受参数,它不会在eclipse中检测Scala

object HelloWorld {
  def main(): Unit = {
    println("Hello Scala!!!")
  }
}
它适用于
args:Array[String]

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello Scala!!!")
  }
}

这只是JVM上的一个约定。在运行程序时,您将无法调用对象作为入口点。例如,在Scala.js中,您有

如果您不需要这些参数,您可以:


这只是JVM上的一个约定。在运行程序时,您将无法调用对象作为入口点。例如,在Scala.js中,您有

如果您不需要这些参数,您可以:


界定“强制性”;您可以有一个argless
main
,它只是不被视为入口点。(Scala可能会坚持使用常规args的单一主方法;我不知道。但如果没有args,它就不是一个入口点。)定义“强制”;您可以有一个argless
main
,它只是不被视为入口点。(Scala可能坚持使用常规args的单一主方法;我不知道。但如果没有args,它将不是一个入口点。)你仍然可以使用App trait获得参数:@NathanHughes是的,这是正确的。如前所述,可通过value
args
获取。非常感谢了解。我在下面的教程中提到,您不必编写JVM所需的全部内容,Scala将为您编译这些内容。我想在这种情况下也是这样:)值得添加,
defmain(args:Array[String]):Int=???
将发出警告,并且不能从IDE运行,但
scala
runner将运行它。如果scala跑步者能放松更多这样的习惯,那就太好了。例如,我想
defmain(args:String*)
,让运行程序直接使用它,即使面向Java的启动程序停止运行。您仍然可以使用apptrait:@NathanHughes yes这是正确的。如前所述,可通过value
args
获取。非常感谢了解。我在下面的教程中提到,您不必编写JVM所需的全部内容,Scala将为您编译这些内容。我想在这种情况下也是这样:)值得添加,
defmain(args:Array[String]):Int=???
将发出警告,并且不能从IDE运行,但
scala
runner将运行它。如果scala跑步者能放松更多这样的习惯,那就太好了。例如,我想
defmain(args:String*)
,让运行程序直接使用它,即使面向Java的启动程序遇到阻碍。
object HelloWorld extends App {
  println("Hello Scala!!!")
}