5

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 のクラス変数であるかのXX$cc <- "cc"ように動作しccますが、これが正しい方法かどうかはわかりません。
たとえば、XX$def <- "hoge" は XX クラス ジェネレーターを壊す可能性があります。

それで、クラス変数とメソッドを定義する標準的な方法があるかどうか知りたいです。

前もって感謝します。

4

1 に答える 1

6

クラス変数の「標準」に関しては、そのような標準は存在しません。参照クラスは R の新機能であり、オブジェクト指向の一部の側面が参照クラスに関する公式ドキュメントに記載されていない限り、まだ標準化されていないと想定しても安全です。

そのような基準が現れるかどうかについては、私は疑います。クラス変数は実際には疑似名前空間の単なる揮発性グローバルであり、外部状態に依存することは一般的に R のやり方ではありません。参照クラスの存在は、パフォーマンスを向上させるために、これに対してすでにかなり大きな譲歩です。

しかし、あなたが指摘したように、あなたがしたことはうまくいきます。R は同意する大人のための言語であり、ご自身の責任で乱雑さを導入することを止めようとはしません。

于 2011-04-22T19:47:51.737 に答える