从文档中可以清楚地看出,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()
}
A
和B
都在server.R
上播放。
由于classA
和classB
都是R6
个类,因此我可以访问finalize
方法(C++
条款中的析构函数)。因此,可以采用以下解决方法。
classA$finalize = function(){
if(cleanupFlag){
cleanupFunction()
cleanupFlag <<- FALSE
}
}
classB$finalize = function(){
if(cleanupFlag){
cleanupFunction()
cleanupFlag <<- FALSE
}
}
这要求我因为范围界定而使用回调。
如果有人知道&#34;正确的&#34;解决这个问题的方法,我会非常感兴趣。