在 R 中,我想创建一个类(R6Class),在调用初始化时创建几个动态方法(方法的数量及其名称取决于初始化中的参数)。但是我遇到了环境的奇怪问题。
这是不起作用的代码的简化版本。
library(R6)
ffactory <- function(i) {
function() i
}
A <- R6Class(
lock_objects=FALSE,
public=list(
initialize=function(args) {
for (i in args) {
self[[i]] <- ffactory(i)
}
}
)
)
a <- A$new(c('a', 'b', 'c'))
现在:
> a$a()
[1] "c"
> a$b()
[1] "c"
> a$c()
[1] "c"
为了找出问题所在,我添加了一行在 ffactory 函数中打印环境。那是
ffactory <- function(i) {
print(ls.str())
function() i
}
现在它已经开始工作了!!!
> a$a()
[1] "a"
> a$b()
[1] "b"
> a$c()
[1] "c"
所以为什么?应该有什么我不明白的。观察者效应还是什么?:)
线的魔力是什么print(ls.str())
?实际上,我既print
不能从这条线上删除,也不能str
从这条线上删除。当然,有这样的台词是很愚蠢的。更不用说屏幕上的垃圾了。