Я пытаюсь лучше понять замыкания, в частности, сведения об области действия функции и о том, как работать с ее окружающей средой.
Основываясь на разделе Description
страницы справки на rlang::fn_env()
, я понял, что функция всегда имеет доступ ко всем переменным в своей области и что окружающая ее среда принадлежит этой области.
Но тогда почему нельзя манипулировать содержимым среды замыкания «постфактум», т.е. после создания функции?
С помощью лексической области видимости R не должен ли bar()
найти x
, когда я помещаю его в окружающую среду?
foo <- function(fun) {
env_closure <- rlang::fn_env(fun)
env_closure$x <- 5
fun()
}
bar <- function(x) x
foo(bar)
#> Error in fun(): argument "x" is missing, with no default