为什么如果我在Scala中扩展apptrait,我会覆盖main方法?

为什么如果我在Scala中扩展apptrait,我会覆盖main方法?,scala,Scala,因此,我了解到App trait包含以下字段: def delayedInit(body: ⇒ Unit): Unit val executionStart: Long def main(args: Array[String]): Unit 我知道,如果一个trait只有一个方法,通过在类声明中的花括号之间“放置代码”,我将覆盖它。但这里我有两种方法。那么为什么我要自动重写main而不是delayedint呢?您没有重写main方法 由于Appextends编译器会按如下方式重写您的代码:

因此,我了解到App trait包含以下字段:

def delayedInit(body: ⇒ Unit): Unit

val executionStart: Long

def main(args: Array[String]): Unit

我知道,如果一个trait只有一个方法,通过在类声明中的花括号之间“放置代码”,我将覆盖它。但这里我有两种方法。那么为什么我要自动重写main而不是delayedint呢?

您没有重写
main
方法

由于
App
extends编译器会按如下方式重写您的代码:

// Before:
object Test extends App {
  println("test")
}

// After:
object Test extends App {
  delayedInit{println("test")}
}
override def delayedInit(body: => Unit) {
  initCode += (() => body)
}
DelayedInit

继承
delayednit
marker trait将具有其初始化代码 重写如下:
code
变为
delayedInit(code)

App
trait
delayedInit
如下:

// Before:
object Test extends App {
  println("test")
}

// After:
object Test extends App {
  delayedInit{println("test")}
}
override def delayedInit(body: => Unit) {
  initCode += (() => body)
}
因此,在
Test
中,对象构造函数code
println(“Test”)
作为函数(
()=>Unit
)存储在
initCode
字段中

App
main
方法实现为调用存储在
initCode
字段中的所有函数:

for (proc <- initCode) proc()
for(proc