问题
从文档中可以清楚地看出,变量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
}
}
由于范围界定,这要求我已经使用回调。
如果有人知道解决此问题的“正确”方法,我会非常感兴趣。