2016-12-24 3 views
3

Ich habe kürzlich auf den Punkt:Werte an mehrere Variablen in Go zuweisen

func main() { 
    x, y := 0, 1 
    x, y = y, x+y 
    fmt.Println(y) 
} 

Was dachte ich, war, dass:

x, y = y, x+y 

ist identisch mit:

x = y 
y = x+y 

Was würde Ergebnis zu Endwerten x = 1, y = 2

Aber die endgültigen Werte, die ich bekomme, ist x = 1, y = 1

Warum ist das?

Danke.

Antwort

7

Dies ist, wie es specified ist:

Die Zuordnung erfolgt in zwei Phasen. Zuerst werden die Operanden von Indexausdrücken und Zeigerumleitungen (einschließlich impliziter Zeigerumleitungen in Selektoren) auf der linken Seite und die Ausdrücke auf der rechten Seite alle in der üblichen Reihenfolge ausgewertet. Zweitens werden die Zuweisungen in der Reihenfolge von links nach rechts ausgeführt.

Die Zuweisung wertet zuerst alle Ausdrücke auf der rechten Seite aus und ordnet dann die Ergebnisse den Variablen auf der linken Seite zu.

Ihre

x, y = y, x+y 

ist im Grunde entspricht dies

tmp1 := y 
tmp2 := x+y 
x = tmp1 
y = tmp2 

Sie auch diese Tatsache nutzen können zwei Variablen in einer Zeile zu tauschen, wie folgt aus:

a, b = b, a 
Verwandte Themen