考虑下面函数的函数:
http://myfaces.apache.org/tomahawk21
为什么f1=function(){
f3=function() print(a)
f2=function() {
print(a)
a=3
f3()}
print(a)
a=2
f2()
a=1
f1()
[1] 1
[1] 2
[1] 2
考虑f2()
其父环境,但f1()
不考虑f3()
其父环境?我希望f2()
打印f3()
,设置在3
,而不是f2()
。
如果在2
内定义了变量,则f2()
无法找到它:
f3()
答案 0 :(得分:1)
为什么
f2()
会将f1()
视为其父环境
因为它是在f1
内定义的。
但
f3()
不考虑f2()
其父环境?
因为它未在f2
内定义。
您需要区分包含环境和父框架。 f2
是您通话中f3
的父框架。但f1
无论如何都是它的包含环境。
另请参阅What is the difference between parent.frame()
and parent.env()
in R; how do they differ in call by reference?和Hadley’s introduction into environments。