1

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

私が達成しようとしていることは可能ですか?

4

1 に答える 1