2016-11-18 9 views
2
package Controls 

object TestBreak extends App { 

    def values = { 
    x1 = x 
    y1 = y 
    } 

    val (x, y) = (1, 2) 

    values 

    var (x1, y1) = (2, 3) 

    println((x, y)) 

    println((x1, y1)) 

} 

Ich konnte hier sehen, das Programm ist erfolgreich ohne Fehler ausgeführt.scala Variablen Initialisierung

Wenn i-Methode aufrufen Werte, noch vor der Initialisierung von Variablen x1, y1, ..

  1. Wie scala diesen Fall behandelt?
  2. Wie wird der Code kompiliert?

Antwort

0

App erstreckt DelayedInit

Als AppDelayedInit erstreckt und MainApp 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 
+0

Lesen Sie mehr verzögert init von hier (http://www.scala-lang.org/api/current /scala/DelayedInit.html) – pamu

Verwandte Themen