删除`global.R`变量时进行清理

时间:2017-06-26 10:01:17

标签: r callback shiny resource-cleanup r6

问题

从文档中可以清楚地看出,server.R中的变量与global.R中的变量的寿命不同。

对于server中的清理操作,有session$onSessionEnded回调函数。可以找到使用此示例here

  

global.R脚本有类似内容吗?

上下文

在我的设置中,我有两个需要清理的全局范围内具有引用语义(R6类的实例)的变量。清理操作取决于两个对象。一些伪代码。

# context global.R
# -----------------------------------------------------------------------------------------

A = classA$new()
B = classB$new()

# call after the last sesion has ended
cleanupFunction = function(){
  # call this before B$finalize()
  A$saveToSQL(B)
  A$finalize()
}

AB都在server.R上播放。

当前解决方法

由于classAclassB都是R6个类,因此我可以访问finalize方法(C++条款中的析构函数)。因此,可以采用以下解决方法。

classA$finalize = function(){
  if(cleanupFlag){
    cleanupFunction()
    cleanupFlag <<- FALSE
  }
}

classB$finalize = function(){
  if(cleanupFlag){
    cleanupFunction()
    cleanupFlag <<- FALSE
  }
}

这要求我因为范围界定而使用回调。

如果有人知道&#34;正确的&#34;解决这个问题的方法,我会非常感兴趣。

0 个答案:

没有答案