【发布时间】:2019-06-09 07:44:42
【问题描述】:
我试图更好地理解closures,特别是关于函数的作用域以及如何使用它的封闭环境的细节
根据rlang::fn_env() 帮助页面的Description 部分,我了解到,函数始终可以访问其范围内的所有变量,并且其封闭环境属于该范围。
但是,为什么不能在“事后”(即在函数创建之后)操作闭包环境的内容?
通过 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
【问题讨论】: