2010-03-22 15 views
0

Compte tenu d'une classe comme ceci:Ruby - Comment supprimer un setter sur un objet

class B 
    class << self 
     attr_accessor :var 
    end 
end 

Supposons que je ne peux pas modifier le code source d'origine de la classe B. Comment pourrais-je aller sur la suppression du compositeur sur la variable de classe var? J'ai essayé d'utiliser quelque chose comme B.send ("unset_method", "var ="), mais cela ne fonctionne pas (ni remove_method, ni l'écrasement de cette méthode avec une méthode var = qui ne fait rien). Des idées?

Répondre

0
class <<B ; remove_method :var= ; end 
+0

Impressionnant! J'ai oublié de faire des choses comme ça! –

1

Essayez:

class B 
    class << self 
    undef var= 
    end 
end 

Vous voudrez peut-être utiliser à la place remove_method:

class B 
    class << self 
    remove_method :var= 
    end 
end 

Pour voir les différences, aller à: http://www.nach-vorne.de/2008/2/28/undef_method-remove_method/

+0

Le résultat en erreur NameError: méthode 'var = 'non défini dans Class –