Auswerten verzögerter Funktionsargumente
Frage: In einem Zitat in The Tour of Go heißt es: „Die Argumente des verzögerten Aufrufs werden sofort ausgewertet.“ Was bedeutet das und was wird eigentlich ausgewertet?
Antwort:
In Go verzögern Verzögerungsanweisungen die Ausführung einer Funktion, bis die einschließende Funktion zurückkehrt. Die Auswertung der Argumente der verzögerten Funktion erfolgt jedoch sofort.
Aufschlüsselung des Auswertungsprozesses:
In der Spezifikation heißt es für jede „defer“-Anweisung:
Der eigentliche Funktionsaufruf wird erst ausgeführt, wenn die umgebende Funktion zurückkehrt.
Beispiel:
Bedenken Sie Folgendes Code:
func def(s string) func() { fmt.Println("tier up") fmt.Println(s) return func() { fmt.Println("clean up") } } func main() { defer def("defered line")() fmt.Println("main") }
Auswertungssequenz:
Fazit:
Wenn eine Defer-Anweisung verwendet wird, werden die Parameter der Deferred-Funktion sofort ausgewertet. Dieser Prozess stellt sicher, dass die Funktion bei ihrer Ausführung Zugriff auf die aktuellsten Werte der Variablen hat. Die tatsächliche Ausführung der verzögerten Funktion wird jedoch verzögert, bis die umgebende Funktion zurückkehrt.
Das obige ist der detaillierte Inhalt vonWas passiert mit verzögerten Funktionsargumenten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!