應用
延伸DelayedInit
作爲App
延伸DelayedInit
和Main
延伸App
。在Main
構造函數代碼執行的延遲初始化的一部分。在介紹init如何工作之前,讓我們看看構造函數變量聲明和方法變量聲明之間的差異。
scala> class A {
| def a(): Unit = { println(b) }
| val b = 1
| }
defined class A
在上面的例子b
稍後將聲明和功能a()
首先聲明。因爲它是Compiler類的構造函數接受它的。
scala> def x: Int = {
| def y: Int = z
| val z = 1
| y
| }
<console>:12: error: forward reference extends over definition of value z
def y: Int = z
^
在上述情況下編譯器抱怨說,它的前向參考。延遲初始化
已被棄用
類和對象(但要注意,不能性狀)繼承DelayedInit標記性狀將有如下的初始化代碼重寫:代碼變得delayedInit(代碼)。
初始化代碼包括所有語句和在初始化期間執行的所有值定義。
實施例:
trait Helper extends DelayedInit {
def delayedInit(body: => Unit) = {
println("dummy text, printed before initialization of C")
body // evaluates the initialization code of C
}
}
class C extends Helper {
println("this is the initialization code of C")
}
object Test extends App {
val c = new C
}
應導致以下被打印:
dummy text, printed before initialization of C
this is the initialization code of C
閱讀更多關於延遲的init從這裏(http://www.scala-lang.org/api/current /scala/DelayedInit.html) – pamu