在R函数中模拟静态变量

问题描述 投票:1回答:1

我正在寻找在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中使用ff的“指针”上。我想到了sys.function()sys.call(),但我不知道如何在attr中使用这些功能。

关于如何在R函数中模拟“静态”变量的任何想法或更好的设计模式?

r static
1个回答
0
投票

像这样在f中定义local

f <- local({ 
  static <- 0
  function() { static <<- static + 1; static }
})
f()
## [1] 1
f()
## [1] 2
© www.soinside.com 2019 - 2024. All rights reserved.