首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R6类变量

使用R6类变量
EN

Stack Overflow用户
提问于 2015-10-12 02:47:34
回答 1查看 692关注 0票数 5

我很好奇是否有一种方法可以在类的定义中为R6类创建类变量?我通读了一遍Introduction to R6 classes短片,但没有找到任何关于类变量的内容。我可以在使用ClassName$variableName <- initial_value创建类之后创建类变量,但我很好奇是否有一种方法可以在实际的类定义中做到这一点。

例如,考虑下面的Person类,它有一个类变量count,它跟踪已实例化的Person对象的数量:

代码语言:javascript
复制
library(R6)

Person <- R6Class("Person",
  public = list(
    name = NA,

    initialize = function(name) {
      Person$count <- Person$count + 1
      if (!missing(name)) self$name <- name
    }
  )
)

Person$count <- 0

Person$count # 0
john <- Person$new("John")
Person$count # 1
james <- Person$new("James")
Person$count # 2
EN

回答 1

Stack Overflow用户

发布于 2017-06-20 10:04:21

不完全是你想要的,但这可能会有帮助。您可以将环境添加到类中,以存储在类的所有实例之间共享的变量。由于环境的引用语义,每当创建新的Person实例时,此环境都不会被重置。

下面是一个例子

代码语言:javascript
复制
library(R6)

Person = R6Class(
  "Person",
  public = list(
    name = NA,
    initialize = function( name ){
      if (!missing(name)) self$name <- name
      counter = self$getCounter()
      private$shared_env$counter = counter + 1
    },
    getCounter = function(){
      counter = private$shared_env$counter
      if( is.null( counter ) )
        counter =  0
      return( counter )
    }
  ),
  private = list(
    shared_env = new.env()
  )
)

测试代码

代码语言:javascript
复制
john <- Person$new("John")
john$getCounter()
# 1
james <- Person$new("James")
james$getCounter()
# 2
john$getCounter()
# 2

您可以将此方法与活动绑定相结合,以使john$counter等功能也能正常工作。如果要在销毁对象时减少计数器,请使用R6中的finalize方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33068778

复制
相关文章

相似问题

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