我想知道在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"
XX$cc <- "cc"
的行为好像cc
是XX的类变量,但我不确定这是否是正确的方法。
例如,XX $ def&lt; - “hoge”可以破坏XX类生成器。
所以,我想知道是否有一种标准方法来定义类变量和方法。
提前致谢。
答案 0 :(得分:6)
关于类变量的“标准”,不存在这样的标准。引用类是R的一个新特性,并且在official documentation on reference classes中未记录OO的某些方面的情况下,可以安全地假设它尚未标准化。
至于是否会出现这样的标准,我对此表示怀疑。类变量实际上只是伪命名空间中的volatile全局变量,而依赖外部状态通常不是R的做事方式。参考类的存在对于提高性能已经是相当大的让步。
但是,正如你所说,你所做的一切都有效。 R是一种同意成年人的语言,它不会试图阻止你引入混乱,风险自负。