繁体   English   中英

可变范围或父环境

[英]Variable scope or parent environment

考虑具有以下功能的功能:

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() f2()视为其父环境,而f3()不将f2()视为其父环境? 我希望f3()打印3 ,设置为f2() ,而不是2
如果在f2()内定义了变量,则f3()找不到它:

f1=function(){
 f3=function() print(b)
 f2=function() {
   print(a)
   b=3
   f3()}
 print(a)
 a=2
 f2()

a=1
f1()
[1] 1
[1] 2
Error in print(b) : object 'b' not found 

为什么f2()认为f1()是其父环境

因为它是在f1内部定义的。

但是f3()不将f2()视为其父环境?

因为它没有在f2内部定义。

您需要区分包含环境和父框架 f2是呼叫中f3父帧 但是f1是其包含环境。

另请参见R中parent.frame()parent.env()之间的区别是什么? 它们在通过引用进行调用方面有何不同? 以及Hadley对环境的介绍

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM