采购此代码:
a <- F
f1 <- function() a
f2 <- function() {
a <- T
eval(f1())
}
Run Code Online (Sandbox Code Playgroud)
并且呼叫f2()将返回FALSE.
如何修改的参数eval,这样f2()将返回TRUE?
你可以这样做:
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所建议的那样,你应该明确地将参数传递给函数,否则你很快就会遇到麻烦.