现在,我了解在扩展App trait后我的程序如何运行。I went through this link to understand how App trait works。在链接中提到通过扩展App特性,我们正在实现懒惰评估。为什么我需要懒惰的评价?懒惰评价比直接调用main()而不是扩展App特性更好?
答案 0 :(得分:4)
我认为反过来说:我们不需要懒惰的评估,但我们在幕后使用它,因为这是实现它的唯一方法。来自scaladoc:
App
特征可用于快速将对象转换为可执行文件 程序
通过使用App
特征,你可以避免写作的样板:
object MainApp {
def main(args: Array[String]): Unit = { ... }
}
无法实现此语法:object MainApp extends App {...}
使用常规方法,因为您必须覆盖main
方法才能调用代码。因此,您可以使用编译器技巧DelayedInit
,它将您的对象体转变为将从main调用的函数调用 - 这是将代码连接到主入口点的方法。
scaladoc提到的警告是:
应该注意的是,这个特性是使用 [[DelayedInit]]功能,表示对象的字段 在主方法出现之前不会被初始化 执行。
对我个人而言,这是一种首选的做事方式。相反,这与Java中的静态初始化程序不同,后者在调用main
方法之前执行。