Wann wird Lexical Scope für eine Funktion innerhalb einer Funktion festgelegt?

8

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?

    
Steve Rowe 14.04.2015, 17:44
quelle

1 Antwort

10

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.)

    
joran 14.04.2015, 17:51
quelle

Tags und Links