在scala对象中声明val与在函数中声明val不同

在scala对象中声明val与在函数中声明val不同,scala,Scala,此代码导致系统为空: object Main extends App { val system = ActorSystem("mySystem") override def main(args: Array[String]): Unit = { println("Done") } } 但是,如果我将系统的声明移动到主,则它已正确初始化。为什么会这样?来自(我的重点): 警告 应该注意的是,这个特性是使用DelayedInit功能实现的,这意味着在执行main方法之前

此代码导致系统为空:

object Main extends App {

  val system = ActorSystem("mySystem")

  override def main(args: Array[String]): Unit = {

    println("Done")
  } 
}
但是,如果我将
系统
的声明移动到
,则它已正确初始化。为什么会这样?

来自(我的重点):

警告 应该注意的是,这个特性是使用
DelayedInit
功能实现的,这意味着在执行main方法之前,对象的字段不会被初始化

还应注意,不应覆盖
main
方法:整个类主体成为“main方法”

照办

object Main extends App {
  val system = ActorSystem("mySystem")  
  println("Done")
}

从(我的)重点:

警告 应该注意的是,这个特性是使用
DelayedInit
功能实现的,这意味着在执行main方法之前,对象的字段不会被初始化

还应注意,不应覆盖
main
方法:整个类主体成为“main方法”

照办

object Main extends App {
  val system = ActorSystem("mySystem")  
  println("Done")
}


系统为空何时?你如何评价它?@GabrielePetronella如果我在
main()
中使用它,它是空的。如果我打开
println
并检查它,它是空的。系统正在
null
什么时候?你如何评价它?@GabrielePetronella如果我在
main()
中使用它,它是空的。如果我打开打印LN,检查它,它是空的。啊,我不知道。谢谢。或者,从原始代码中删除
扩展应用程序
覆盖
。啊,我不知道。谢谢。或者,从原始代码中删除
扩展应用程序
覆盖