Abschlussaufrufe in Go
In Go ist die Verwendung von Klammern nach dem Text eines Abschlusses nicht auf Abschlusskontexte beschränkt. Das Kernkonzept, das dieses Verhalten bestimmt, besteht darin, dass Ausdrücke in verzögerten Anweisungen Funktionsaufrufe sein müssen.
Funktionsliterale mit Abschlüssen
Betrachten Sie ein Funktionsliteral wie func(ch chan int) { ch <- ACK }(), wobei die Klammern dem Abschlusskörper folgen. Diese Syntax schließt den Abschluss in einen sofort aufgerufenen Funktionsaufruf ein. Dadurch kann die Funktion bei der Initialisierung ausgeführt werden und das Argument „replyChan“ an den Abschluss übergeben.
Verzögerte Anweisungen
In verzögerten Anweisungen, wie z. B. defer func() { result } () stellen die Klammern sicher, dass der eingeschlossene Ausdruck ein Funktionsaufruf ist. Ohne diese Syntax wäre der Ausdruck unvollständig und kein gültiger Funktionsaufruf. Die Syntax für verzögerte Anweisungen schreibt daher vor, dass der Ausdruck ein Funktionsaufruf sein muss.
Orthogonalität mit Funktionsaufrufen
Diese Orthogonalität gewährleistet die Konsistenz mit Funktionsaufrufen außerhalb von verzögerten Anweisungen. Beispielsweise stellt f(), wobei f ein Funktionswert ist, einen Funktionsaufruf dar, der einen Wert zurückgibt. Im Gegensatz dazu stellt f ohne Klammern den Funktionswert selbst dar. Diese parallele Syntax gilt auch für Ausdrücke in verzögerten Anweisungen.
Abschlussausführung
In einem in einer verzögerten Anweisung definierten Abschluss bestimmen die Klammern, wann der Abschluss ausgeführt wird. Zum Beispiel in defer func() { fmt. Println(i) }(), der Abschluss wird sofort ausgeführt, wenn die Defer-Anweisung angetroffen wird, und erfasst den aktuellen Wert von i. Im Gegensatz dazu defer func(n int) { fmt. Println(n) }(i) erfasst und druckt den Wert von i zum Zeitpunkt der Ausführung der Defer-Anweisung, nicht wenn der Abschluss ausgeführt wird.
Das obige ist der detaillierte Inhalt vonWarum sind nach Abschlusskörpern in den verzögerten Anweisungen von Go Klammern erforderlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!