2012-08-05 1 views
3

J'ai décidé de donner un autre coup aux classes de référence, mais mon premier monde de salut me cause déjà des problèmes. Qu'est-ce qui ne va pas ici?Champs de classe de référence disparaissant

> memory <- setRefClass(
+ Class = "memory", 
+ fields = list(state="vector"), 
+ methods = list(
+  get = function() { return(state) }, 
+  set = function(x) { state <<- x } 
+ ) 
+)$new() 

> memory$set(123) 

> print(memory) 
Reference class object of class "memory" 
Field "state": 
[1] 123 

> memory$get() 
[1] 123 

> print(memory) 
Reference class object of class "memory" 
Field "state": 
Error in methods::show(field(fi)) : 
    error in evaluating the argument 'object' in selecting a method for function 'show': Error in get(name, envir = .self) : 
    unused argument(s) (name, envir = .self) 
+1

Selon toute vraisemblance, doit faire avec 'get' étant une sorte de nom réservé; votre code fonctionne si je renomme 'get' en quelque chose d'autre comme' get.state'. – flodel

+0

Ah génial. Cela ne me rend pas trop à l'aise que 'setRefClass' ne lance pas d'avertissement pour cela. – Jeroen

Répondre

5

Je ne suis pas très expérimenté avec Reference Classes mais selon la page d'aide (?ReferenceClasses), je pense que vous devez ajouter une méthode show à votre classe pour être en mesure d'imprimer votre objet automaticaly.

memory <- setRefClass(
      Class = "memory", 
      fields = list(state="vector"), 
      methods = list(
      get = function() { return(state) }, 
      set = function(x) { state <<- x }, 
      show = function() {methods::show(state)} 
     ) 
     )$new() 


memory$set(123) 
print(memory) 
#[1] 123 

memory$get() 
#[1] 123 


print(memory) 
#[1] 123 

Hope this aide

Questions connexes