質問
ドキュメントから明らかなように、 の変数はserver.R
の変数とは寿命が異なりますglobal.R
。
のクリーンアップ操作にserver
は、session$onSessionEnded
コールバック関数があります。これを使用する例は、ここにあります。
global.R
スクリプトに似たようなものはありますか?
環境
R6
私のセットアップでは、クリーンアップが必要なグローバル スコープに参照セマンティクス (クラスのインスタンス) を持つ 2 つの変数があります。クリーンアップ操作は、両方のオブジェクトに依存しています。いくつかの疑似コード。
# 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
}
}
これには、スコープのため、すでにコールバックを使用する必要があります。
誰かがこれを解決する「適切な」方法を知っていれば、私は非常に興味があります。