首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问实例化另一个R6类的R6类的元素

访问实例化另一个R6类的R6类的元素
EN

Stack Overflow用户
提问于 2020-09-02 03:53:09
回答 2查看 145关注 0票数 1

假设我有一个类SimpleClass,这个类的一个方法可以返回另一个类的对象,例如

代码语言:javascript
复制
SimpleClass <- R6::R6Class(
  "SimpleClass",
  public = list(
    initialize = function() {
      private$a <- 1
    },
    cls_two = function() SimpleClass2$new()
  ),
  private = list(
    a = numeric()
  )
)

SimpleClass2在哪里

代码语言:javascript
复制
SimpleClass2 <- R6::R6Class(
  "SimpleClass2",
  public = list(
    initialize = function() {
      private$b <- 2
    },
    get_a = function() private$a
  ),
  private = list(
    b = numeric()
  )
)

在这里,如果我实例化SimpleClass并调用方法cls_two(),则得到的对象将无法访问第一个对象的元素,除非我传递这些元素。第二个类有没有办法访问第一个类的元素?

代码语言:javascript
复制
first <- SimpleClass$new()
second <- first$cls_two()
second$get_a()
# NULL

请注意,我不想使用传统意义上的继承,因为我不想重新实例化第一个类。我也不希望把所有的对象都传递给SimpleClass2$new()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-02 04:03:26

扩展SimpleClass2的构造函数以获取SimpleClass类型的对象,并在SimpleClass::cls_two中调用构造函数时传递self

代码语言:javascript
复制
SimpleClass2 <- R6::R6Class(
  "SimpleClass2",
  public = list(
    initialize = function(obj) {
      private$b <- 2
      private$obj <- obj
    },
    get_a = function() private$obj
  ),
  private = list(
    b = numeric(),
    obj = NULL
  )
)
票数 2
EN

Stack Overflow用户

发布于 2020-09-02 04:02:42

您可以让SimpleClass2拥有一个简单类的成员,并可以选择在其构造函数中传递一个简单类:

代码语言:javascript
复制
SimpleClass <- R6::R6Class(
  "SimpleClass",
  public = list(
    initialize = function() {
      private$a <- 1
    },
    cls_two = function() SimpleClass2$new(self)
  ),
  private = list(
    a = numeric()
  )
)

SimpleClass2 <- R6::R6Class(
  "SimpleClass2",
  public = list(
    initialize = function(Simp1 = SimpleClass$new()) {
      private$a <- Simp1
      private$b <- 2
    },
    get_a = function() private$a
  ),
  private = list(
    a = SimpleClass$new(),
    b = numeric()
  )
)

它是这样工作的:

代码语言:javascript
复制
first <- SimpleClass$new()
second <- first$cls_two()
second$get_a()
#> <SimpleClass>
#>   Public:
#>     clone: function (deep = FALSE) 
#>     cls_two: function () 
#>     initialize: function () 
#>   Private:
#>     a: 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63694547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档