App erstreckt DelayedInit
Als App
DelayedInit
erstreckt und Main
App
erstreckt. Der Code im Konstruktor Main
wird als Teil der verzögerten Initialisierung ausgeführt. Bevor wir auf die Funktionsweise der verzögerten Init-Funktion eingehen, sehen wir die Unterschiede zwischen der Constructor-Variablen-Deklaration und der Methode-Variablen-Deklaration.
scala> class A {
| def a(): Unit = { println(b) }
| val b = 1
| }
defined class A
Im obigen Beispiel b
wird später erklärt und Funktion a()
zuerst deklariert wird. Wie es der Konstruktor der Klasse Compiler akzeptiert.
In dem obigen Fall beschwert sich Compiler sagen, dass es eine Vorwärtsreferenz ist.
Verzögerte Init ist
veraltet
Klassen und Objekte (aber beachten Sie, dass nicht Züge) wird die DelayedInit Marker Merkmal vererben ihre Initialisierungscode neu geschrieben haben, wie folgt: Code wird delayedInit (Code).
Der Initialisierungscode umfasst alle Anweisungen und alle Wertdefinitionen, die während der Initialisierung ausgeführt werden.
Beispiel:
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
}
im folgenden Ergebnis sollte gedruckt werden:
dummy text, printed before initialization of C
this is the initialization code of C
Lesen Sie mehr verzögert init von hier (http://www.scala-lang.org/api/current /scala/DelayedInit.html) – pamu