【发布时间】:2018-05-07 21:11:05
【问题描述】:
在大型项目中,有时我希望拥有一个标准化且严格的数据“对象”,以便该数据的任何功能都可以自信地假设对象的许多属性,而只是断言该对象属于预期的类。所以我很高兴发现了 R6 类,它似乎通过提供如下“私有”元素来实现这一点:
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 函数是一个hack。我真正想要的是data 的属性可以像data$x 或data[['x']] 一样简单地访问,同时仍然具有私有变量的防篡改特性。有没有更好的方法来实现这一目标?
【问题讨论】:
-
这个讨论似乎表明没有更简单的方法可以做到这一点:github.com/r-lib/R6/issues/41