2

问题

从文档中可以清楚地看出,变量server.R的生命周期与global.R.

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

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()
}

A并且B都在server.R.


当前的解决方法

由于classAclassB都是R6类,因此我可以访问该finalize方法(在术语中是析构函数C++)。因此,以下解决方法是可能的。

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

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

由于范围界定,这要求我已经使用回调。


如果有人知道解决此问题的“正确”方法,我会非常感兴趣。

4

0 回答 0