Когда определяется Lexical Scope для функции внутри функции?
Я посмотрел на другие лексические вопросы об области применения в R, и я не могу найти ответ. Рассмотрим этот код:
f <- function(x) {
g <- function(y) {
y + z
}
z <- 4
x + g(x)
}
f(3)
f(3)
вернет ответ 10. Мой вопрос почему? В точке g()
определяется в коде, z
не было назначено никакого значения. В какой момент закрытие для g()
создан? Это "смотрит вперед" на остальную часть тела функции? Это создано, когда g(x)
оценивается? Если так, то почему?
1 ответ
Когда f
запускается, первое, что происходит, это то, что функция g
создан в f
Локальная среда. Далее переменная z
создается по назначению.
В заключение, x
добавляется к результату g(x)
и вернулся. В тот момент, когда g(x)
называется, x = 3
а также g
существует в f
Локальная среда. Когда свободная переменная z
встречается при выполнении g(x)
, R смотрит в следующую среду, вызывающую среду, которая f
Локальная среда. Находит z
там и продолжается, возвращая 7. Затем он добавляет это к x
который 3.
(Так как этот ответ привлекает больше внимания, я должен добавить, что мой язык был немного свободным, когда я говорил о том, что x
"равно" в различных точках, которые, вероятно, не точно отражают задержку оценки аргументов Р. x
будет равно 3, как только значение будет необходимо.)