Al experimentar con las nuevas clases de referencia en RI noté un comportamiento extraño si usa la notación" [[]] "para los métodos (X [[" doSomething "]] en lugar de X $ doSomething). Esta notación funciona para los campos, pero inicialmente pensé que no funcionaría para los métodos hasta que descubrí que si ejecuta "clase (X $ doSomething)", puede usar "[[]]" después. El ejemplo simple a continuación ilustra el punto.Usando la notación "[[]] para métodos de clase de referencia
setRefClass("Number",
fields = list(
value = "numeric"
),
methods = list(
addOne = function() {
value <<- value + 1
}
)
)
X <- new("Number", value = 1)
X[['value']] # 1
X[["addOne"]]() # Error: attempt to apply non-function
class(X[["addOne"]]) # NULL
class(X$addOne) # "refMethodDef"
# Now the following works!
X[["addOne"]]() # sets X$value = 2
class(X[["addOne"]]) # "refMethodDef"
La razón me encontré con esto es porque quiero mi grupo de objetos juntos en una lista y crear una función "applyMethod" que se aplica un método especificado en cada uno de los objetos dentro. Por lo tanto, necesito especificar el método como una cadena. ¿Alguien tiene alguna idea de cómo puedo lograr esto?
se supone clases referencia a una instancia como '.A = setRefClass (<...>); .A $ nuevo() '. ¿'[[' Está destinado a ser utilizado para el acceso de miembros? De '? ReferenceClasses' la API es' $ '. También podría colorear dentro de las líneas. –