2011-04-22 11 views
5

Quiero saber la forma correcta de definir los métodos de clase y la variable de clase en la clase de referencia R5.define los métodos de clase y las variables de clase en la clase de referencia R5

Aquí se muestra un ejemplo:

> # 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" 

Los XX$cc <- "cc" se comporta como si el cc es variable de clase del XX, pero no estoy seguro de si se trata de una forma correcta.
Por ejemplo, XX $ def < - "hoge" puede romper el generador de clase XX.

Por lo tanto, quiero saber si existe una forma estándar de definir la variable de clase y los métodos.

Gracias de antemano.

+0

No creo que haya un equivalente de métodos/variables de clase en el marco de objetos de referencia. – hadley

+0

@hadley gracias. entonces, ¿crees que hay alguna razón para no implementar métodos/variables de clase en la clase R5? – kohske

+0

Simplemente no creo que tengan ningún rol. ¿Puedes dar un ejemplo de para qué necesitas las variables/métodos de clase? – hadley

Respuesta

6

En cuanto a un "estándar" para variables de clase, no existe tal estándar. Las clases de referencia son una nueva característica para R, y en la medida en que algún aspecto de OO no esté documentado en el official documentation on reference classes, es seguro asumir que aún no se ha estandarizado.

En cuanto a si tal estándar podría aparecer, lo dudo. Las variables de clase son realmente variables globales volátiles en un pseudo-espacio de nombres, y confiar en el estado externo generalmente no es la forma R de hacer las cosas. La existencia de clases de referencia ya es una gran concesión en contra de esto para mejorar el rendimiento.

Pero, como ha notado, lo que ha hecho funciona. R es un lenguaje para adultos que dan su consentimiento, y no intentará evitar que usted introduzca problemas por su cuenta y riesgo.

+0

Totalmente de acuerdo. Gracias. – kohske

Cuestiones relacionadas