为什么如果我在Scala中扩展apptrait,我会覆盖main方法?
因此,我了解到App trait包含以下字段:为什么如果我在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编译器会按如下方式重写您的代码:
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
traitdelayedInit
如下:
// Before:
object Test extends App {
println("test")
}
// After:
object Test extends App {
delayedInit{println("test")}
}
override def delayedInit(body: => Unit) {
initCode += (() => body)
}
因此,在Test
中,对象构造函数codeprintln(“Test”)
作为函数(()=>Unit
)存储在initCode
字段中
App
的main
方法实现为调用存储在initCode
字段中的所有函数:
for (proc <- initCode) proc()
for(proc