在 R6 中填充 class 变量时出错 - 无法访问 class 变量

Error populating class variable in R6 - cannot access class variable

这是我的例子:

library(R6)

SharedVar <- R6Class("SharedVar",
                     public = list(x= NULL)
)

MainClass <- R6Class("MainClass",
                     public = list(
                       name = NULL,
                       shared_var = SharedVar$new(),
                       initialize = function(name = NA){
                         self$name = name
                       },
                       popuate_shared_var = function(foo = NA){
                         shared_var$x = foo
                       }
                       )
                     )

当我运行:

test_obj <- MainClass$new(name = "test")
test_obj$popuate_shared_var(foo="some value")

我回来了:

Error in shared_var$x = foo : object 'shared_var' not found

但以下工作正常并且 returns NULL:

test_obj$shared_var$x

我错过了什么?

你需要一个自我,这样 R 就知道在哪里可以找到 shared_var。

library(R6)

SharedVar <- R6Class("SharedVar",
                     public = list(x= NULL)
)

MainClass <- R6Class("MainClass",
                     public = list(
                       name = NULL,
                       shared_var = SharedVar$new(),
                       initialize = function(name = NA){
                         self$name = name
                       },
                       popuate_shared_var = function(foo = NA){
                         self$shared_var$x = foo
                       }
                     )
)

test_obj <- MainClass$new(name = "test")
test_obj$popuate_shared_var(foo="some value")

test_obj$shared_var$x
#> [1] "some value"

reprex package (v1.0.0)

于 2021 年 4 月 12 日创建