2

質問

ドキュメントから明らかなように、 の変数は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()
}

ABは両方とも で動作していserver.Rます。


現在の回避策

classAとはどちらclassBもクラスであるため、メソッド (用語ではデストラクタ) にR6アクセスできます。したがって、次の回避策が可能です。finalizeC++

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

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

これには、スコープのため、すでにコールバックを使用する必要があります。


誰かがこれを解決する「適切な」方法を知っていれば、私は非常に興味があります。

4

0 に答える 0