R6 クラスの初期化関数を動的に作成しようとしています。まず、ロックされていないクラス定義を作成します。
cls <- R6::R6Class(
name,
inherit=TPayload,
lock_objects=FALSE,
public=list(
module=class(tail(Parser$thrift_stack, 1)[[1]])[[1]],
ttype=ttype
))
そして、初期化関数を追加した後のどこかに:
cls$set("public", 'initialize', init_func_generator(cls, default_spec))
ここで、init_func_generator:
init_func_generator = function(cls, spec) {
func = function(...) {
cat('Hello\n')
}
return(func)
}
オブジェクトを作成するときに、単純な初期化関数を実行すると機能します。
cli$new(name='abc')
ただし、作成された「初期化」のスコープ外から「スペック」変数にアクセスしようとすると、次のようになります。
init_func_generator = function(cls, spec) {
func = function(...) {
for(s in spec) {
cat(str(s))
}
}
return(func)
}
私は得る:
* object 'spec' not found
私が達成しようとしていることは可能ですか?