2

所以我有一个简单的 Scala 文件:

object Main extends App {
  println("Init")

  def test=println("Method")
}
Main.test
println(Main)
print("End")

当我将它作为脚本运行时,我得到以下输出:

$ scala Main.scala
Method
Main$$anon$1$Main$@2449a2da
End

我想知道为什么这println("Init")条线永远不会被调用?我希望它在 Main 的初始化时被调用,这应该在调用它的方法时发生。

4

1 回答 1

6

让我们仔细看看 App trait scaladoc

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

因此,您必须执行以下操作:

object Main extends App {
  println("Init")

  def test=println("Method")
}
Main.main(Array.empty)     // here is the missing call
Main.test
println(Main)
print("End")

要获得所需的输出:

Init
Method
Main$$anon$1$Main$@37a001ff
End% 
于 2013-04-19T15:59:05.027 回答