93

和有什么区别

object Application extends App {
   println("Hello World")
}

object Application {
    def main(args: Array[String]): Unit = {
        println("Hello World");
    }
}
4

3 回答 3

65

App trait 是一种创建可执行 scala 程序的便捷方式。与 main 方法的不同之处在于(除了明显的语法差异之外)App trait 使用了延迟初始化功能。

来自 2.9 的发行说明(请参阅http://www.scala-lang.org/old/node/9483

继承 App trait 的对象使用 Scala 2.9 的延迟初始化特性来执行整个主体作为继承的 main 方法的一部分。

App 方案的另一个新特性是命令行参数现在可以通过 args 值访问(继承自 trait App)

于 2012-07-26T10:58:13.130 回答
4

这两种情况在 scala 脚本上是不一样的。

object extends App不是由“ scala MyObject.scala”命令执行的,而是包含main方法的对象是由“ scala MyObject.scala”命令执行的。这被描述为 scala 寻找具有主要脚本方法的对象。

当使用 Eclipse 的 REPL 或 scala 工作集时,需要MyObject.main(Array[String]())为这两种情况显式调用。

这个简单的提示对像我这样的初学者很有帮助。

于 2016-09-23T15:24:25.540 回答
0

App trait 是使用 [[DelayedInit]] 功能实现的,这意味着在执行 main 方法之前对象的字段不会被初始化。

于 2018-08-18T15:10:25.550 回答