首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R- R6类作为严格的“只读”数据结构

R- R6类作为严格的“只读”数据结构
EN

Stack Overflow用户
提问于 2018-05-08 05:11:05
回答 1查看 206关注 0票数 1

在大型项目中,我有时希望有一个标准化和严格的数据“对象”,这样数据的任何函数都可以自信地假定对象的许多属性,而只需断言对象属于预期的类。所以我很高兴发现了R6类,它似乎通过提供“私有”元素实现了这一点,如下所示:

代码语言:javascript
复制
library('R6')
Data = R6::R6Class("Data", 
    private = list(x = NA, y = pi),
    public = list(
        initialize = function(x, y) {
            private$x = x
        },
        get = function(attribute) return(private[[attribute]])
    )
)

data = Data$new(x = 5)
data$get('x')
data$get('y')

这个get函数是一个技巧。我真正想要的是,data的属性可以简单地作为data$xdata[['x']]访问,同时仍然具有私有变量的防篡改特性。有没有更好的方法来实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-05-09 01:16:13

我将简要总结一下what I learned here。因为R6类本质上是一个环境,所以base::lockBinding函数在这里是适用的:

代码语言:javascript
复制
library('R6')
Data = R6::R6Class("Data", 
    public = list(
        x = NA,
        y = pi,
        initialize = function(x) {
            self$x = x
            lockBinding("x", self)
            lockBinding("y", self)
        }
    )
)

data = Data$new(x = 5)
data$x
data$y

因为xy是锁定的,所以data$x = 5会根据需要抛出一个错误。

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

https://stackoverflow.com/questions/50222481

复制
相关文章

相似问题

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