`eval`使用函数的局部变量

Dan*_*ian 1 eval r

采购此代码:

a <- F
f1 <- function() a
f2 <- function() {
  a <- T
  eval(f1())
}
Run Code Online (Sandbox Code Playgroud)

并且呼叫f2()将返回FALSE.

如何修改的参数eval,这样f2()将返回TRUE

Bro*_*ieG 5

你可以这样做:

a <- F
f1 <- function() a
f2 <- function() {
  a <- T
  environment(f1) <- new.env()
  eval(f1())
}
f2()
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)

虽然我不鼓励它.我们在这里所做的是改变环境,f1使其成为f2环境的环境,这意味着f1可以f2通过"词法"范围访问s变量(好吧,这里的虚假词汇我们将它短路了) .

通常,正如Roman所建议的那样,你应该明确地将参数传递给函数,否则你很快就会遇到麻烦.