Не совсем уверен, что я здесь делаю сам.
Надеюсь, это поможет / вдохновит вас:
new.obj <- function(){
env1 <- new.env()
env1$some.var = NULL
f <- function() {
environment(g) <- parent.frame()
g(x="some.var", envir = env1)
}
get.var <- function(){ env1$some.var }
return(list(f=f, get.var=get.var))
}
g <- function(x, ...) assign(x, "hihi_changed", envir = ...)
obj<-new.obj(); obj$get.var()
null возвращается, как мы ожидаем. obj$f(); obj$get.var()
функция g в конечном итоге вызывается, что меняет some.var
.
Мой трюк заключается в добавлении переменной some.var
в новое окружение и всегда ссылается на это env1
environment.
Так что в функции g () всегда используйте многоточие для ссылки на среду new.obj env1
, где в настоящее время some.var
живет.
Надеюсь, что это поможет вам продолжить работу.