回避したいR参照クラスの動作に遭遇しました。次のコードでは、参照クラス B に参照クラス A の 2 つのフィールドがあります。
B のこれらのフィールドは、B のinitialize()
メソッドが呼び出される前に、参照クラス A のゼロ引数 (デフォルト) バージョンで (おそらく 2 回) インスタンス化されているように見えます。これらのインスタンスは、B の初期化プロセス中にインスタンス A の正しいバージョンに置き換えられます。問題は、lock()
B のインスタンス ジェネレーターから使用する場合、A の最初の空のインスタンス化を B で置き換えることができないことです。別の問題は、参照クラス A が初期化 [または Missing(c) テスト] で既定値を必要とすることです。
ヘルプ - 提案 - など。
A <- setRefClass('A',
fields = list(
count = 'numeric'
),
methods = list(
initialize = function (c=0) {
cat('DEBUG: A$initialize(c); where c='); cat(c); cat('\n')
count <<- c
}
)
)
instance.of.A <- A$new(10)
str(instance.of.A)
B <- setRefClass('B',
field = list(
a = 'A',
b = 'A'
),
methods = list(
initialize = function(c) {
a <<- instance.of.A
b <<- getRefClass('A')$new(c)
}
)
)
instance.of.b <- B$new(100)
str(instance.of.b)