采购此代码:
a <- F
f1 <- function() a
f2 <- function() {
a <- T
eval(f1())
}
并且调用f2()
将返回FALSE
。
如何修改eval
的参数,以便f2()
返回TRUE
?
答案 0 :(得分:5)
你可以这样做:
a <- F
f1 <- function() a
f2 <- function() {
a <- T
environment(f1) <- new.env()
eval(f1())
}
f2()
# [1] TRUE
虽然我不鼓励它。我们在此处所做的是将f1
的环境更改为包含f2
环境的环境,这意味着f1
可以访问f2
个变量通过“词汇”范围(好吧,这里的虚假词汇,我们将它短路)。
一般来说,正如Roman建议的那样,你应该明确地将参数传递给函数,否则你很快就会遇到麻烦。