В больших проектах мне иногда хочется иметь стандартизированный и жесткий «объект» данных, чтобы любая функция этих данных могла уверенно принимать многочисленные свойства объекта, не более чем утверждая, что объект принадлежит ожидаемому классу. Поэтому я очень рад, что открыл классы 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
функция взломана. Что я действительно хочу, так это чтобы атрибуты data
были доступны просто как data$x
или data[['x']]
, при этом сохраняя защищенные свойства от частных переменных. Есть ли лучший способ добиться этого?