【问题标题】:Error populating class variable in R6 - cannot access class variable在 R6 中填充类变量时出错 - 无法访问类变量
【发布时间】:2021-07-07 23:24:44
【问题描述】:

这是我的例子:

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

但以下工作正常并返回 NULL:

test_obj$shared_var$x

我错过了什么?

【问题讨论】:

  • 您的popuate_shared_var 函数中似乎缺少self$ 部分:self$shared_var$x = foo
  • 不会self 使它成为类实例变量吗?
  • @MrFlick,谢谢,当然,但我应该可以使用引用 obj 作为类变量:r6.r-lib.org/articles/…
  • 您仍然需要使用self 来访问该对象。就试一试吧。创建第二个对象并调用popuate_shared_var。您会看到两者的值都发生了变化。

标签: r class-variables r6


【解决方案1】:

您需要一个 self 以便 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-04-12 创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2015-12-07
    相关资源
    最近更新 更多