为什么我们需要通过在Scala中扩展App trait来进行延迟评估?

时间:2016-04-12 02:58:08

标签: scala

现在,我了解在扩展App trait后我的程序如何运行。I went through this link to understand how App trait works。在链接中提到通过扩展App特性,我们正在实现懒惰评估。为什么我需要懒惰的评价?懒惰评价比直接调用main()而不是扩展App特性更好?

1 个答案:

答案 0 :(得分:4)

我认为反过来说:我们不需要懒惰的评估,但我们在幕后使用它,因为这是实现它的唯一方法。来自scaladoc

  

App特征可用于快速将对象转换为可执行文件   程序

通过使用App特征,你可以避免写作的样板:

object MainApp { 
  def main(args: Array[String]): Unit = { ... }
}

无法实现此语法:object MainApp extends App {...}使用常规方法,因为您必须覆盖main方法才能调用代码。因此,您可以使用编译器技巧DelayedInit,它将您的对象体转变为将从main调用的函数调用 - 这是将代码连接到主入口点的方法。

scaladoc提到的警告是:

  

应该注意的是,这个特性是使用   [[DelayedInit]]功能,表示对象的字段   在主方法出现之前不会被初始化   执行。

对我个人而言,这是一种首选的做事方式。相反,这与Java中的静态初始化程序不同,后者在调用main方法之前执行。