我正在寻找在R函数中模拟'static'变量的方法。 (我知道R不是编译语言,因此不是引号。)“静态”是指“静态”变量应该是持久的,可以在函数中关联并可以在函数中进行修改。
我的主要想法是使用attr
功能:
# f.r
f <- function() {
# Initialize static variable.
if (is.null(attr(f, 'static'))) attr(f, 'static') <<- 0L
# Use and/or modify the static variable...
attr(f, 'static') <<- attr(f, 'static') + 1L
# return something...
NULL
}
只要attr
可以找到f
,这很好。在某些情况下,情况已不再如此。例如:
sys.source('f.r', envir = (e <- new.env()))
environment(e$f) <- .GlobalEnv
e$f() # Error in e$f() : object 'f' not found
理想情况下,我会在attr
中使用f
在f
的“指针”上。我想到了sys.function()
和sys.call()
,但我不知道如何在attr
中使用这些功能。
关于如何在R函数中模拟“静态”变量的任何想法或更好的设计模式?
像这样在f
中定义local
:
f <- local({
static <- 0
function() { static <<- static + 1; static }
})
f()
## [1] 1
f()
## [1] 2