问题
从文档中可以清楚地看出,变量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.
当前的解决方法
由于classA和classB都是R6类,因此我可以访问该finalize方法(在术语中是析构函数C++)。因此,以下解决方法是可能的。
classA$finalize = function(){
if(cleanupFlag){
cleanupFunction()
cleanupFlag <<- FALSE
}
}
classB$finalize = function(){
if(cleanupFlag){
cleanupFunction()
cleanupFlag <<- FALSE
}
}
由于范围界定,这要求我已经使用回调。
如果有人知道解决此问题的“正确”方法,我会非常感兴趣。