Ich habe mir die anderen lexikalischen Scoping-Fragen in R angeschaut und kann die Antwort nicht finden. Betrachten Sie diesen Code:
%Vor% f(3)
gibt eine Antwort von 10 zurück. Meine Frage ist warum? An dem Punkt g()
ist im Code definiert, z
wurde kein Wert zugewiesen. An welchem Punkt wird der Abschluss für g()
erstellt? Schaut es dem Rest des Funktionskörpers voraus? Wird es erstellt, wenn g(x)
ausgewertet wird? Wenn ja, warum?
Wenn f
ausgeführt wird, passiert zuerst, dass eine Funktion g
in der lokalen Umgebung von f
erstellt wird. Als nächstes wird die Variable z
durch Zuweisung erstellt.
Schließlich wird x
zum Ergebnis von g(x)
hinzugefügt und zurückgegeben. An dem Punkt, an dem g(x)
aufgerufen wird, ist x = 3
und g
in der lokalen Umgebung von f
vorhanden. Wenn die freie Variable z
während der Ausführung von g(x)
angetroffen wird, sucht R in der nächsten Umgebung die aufrufende Umgebung, die die lokale Umgebung von f
ist. Es findet z
dort und geht weiter, gibt 7 zurück. Dann addiert es zu x
, was 3 ist.
(Da diese Antwort mehr Aufmerksamkeit auf sich zieht, sollte ich hinzufügen, dass meine Sprache ein bisschen locker war, wenn wir darüber sprechen, was x
an verschiedenen Punkten "gleich" ist, was wahrscheinlich die verzögerte Bewertung von Argumenten durch R nicht genau widerspiegelt. x
wird gleich 3, sobald der Wert benötigt wird.)
Tags und Links r lexical-scope