【发布时间】:2017-02-06 09:26:25
【问题描述】:
我有一个为程序的其余部分“准备”东西的功能。例如,下面的函数定义了两个函数:
prepare = function() {
f = function(x) x+1
g = function(x) x+2
}
当然,一旦函数执行,函数 f 和 g 将不再可用。它们在“prepare”的执行环境中定义,一旦函数完成执行,它就消失了。
我的问题是,有没有办法保留或访问该执行环境?
场景是我从外部获得“准备”功能,因此无法编辑其代码,我想执行它并以下列方式使用它所做的任何事情:
my_function = function(prepare) {
# the prepare function is supplied by the user
prepare() #this should define the f and g functions as above
f(3) # this wouldn't work normally, since f is defined inside prepare
}
有没有办法做到这一点?也就是说,让“准备”影响调用环境,而不是它的执行环境?
编辑:
找到了一种使用 body() 的解决方法,它允许访问函数内部的表达式,并从中构建新的表达式,因此我基于“准备”函数的“主体”和“原创”功能。正如我所想的那样,真正的解决方案是使用“方面方向”。但不幸的是,R 不是面向方面的语言。也许是一个新包的想法:-)
【问题讨论】:
标签: r function environment execution