在R5引用类中定义类方法和类变量

koh*_*ske 5 oop r reference-class

我想知道在R5引用类中定义类方法和类变量的正确方法.

这是一个例子:

> # define R5 class XX
> # member variable: ma
> # member method: mfa
> XX <- setRefClass("XX",
+   fields = list(ma = "character"),
+   methods = list(
+     mfa = function() return(paste(ma, "*"))
+     ))
> 
> XX
Generator object for class "XX":

Class fields:

Name:         ma
Class: character

 Class Methods:  
    "callSuper", "copy", "export", "field", "getClass", "getRefClass", "import", "initFields", 
"mfa"


 Reference Superclasses:  
    "envRefClass"

> # create an instance of XX
> x <- XX$new(ma="ma")
> 
> # call member method refering to the member variable.
> x$mfa()
[1] "ma *"
> 
> # here, I define *class* variable
> XX$cc <- "cc"

> # contents of XX
> ls(XX)
[1] "cc"        "className" "def"       "methods"   "new"      

> # here, I define member method referring to the class var.
> XX$methods(mfc = function() {
+   return(XX$cc)
+ })

> # it does work.
> x$mfc()
[1] "cc"
Run Code Online (Sandbox Code Playgroud)

XX$cc <- "cc"运行,就好像cc是XX的类变量,但我不知道这是否是一个正确的做法.
例如,XX $ def < - "hoge"可以打破XX类生成器.

所以,我想知道是否有一种标准方法来定义类变量和方法.

提前致谢.

goo*_*ide 6

关于类变量的"标准",不存在这样的标准.参考类是R的一个新特性,并且在参考类官方文档中没有记录OO的某些方面,可以安全地假设它尚未标准化.

至于是否会出现这样的标准,我对此表示怀疑.类变量实际上只是伪命名空间中的volatile全局变量,而依赖外部状态通常不是R的做事方式.参考类的存在已经是一个相当大的让步,以提高性能.

但是,正如你所说,你所做的一切都有效.R是一种同意成年人的语言,它不会试图阻止你引入混乱,风险自负.