2010-02-06 7 views
2

J'ai quelques modules dans un tableau. Tous les modules définissent une méthode appelée "process", et j'aimerais appeler chacune de ces méthodes de processus en séquence. Le code je ressemble à ceci (en supposant que les modules sont tous définis dans la classe Mod):Comment surcharger dynamiquement des méthodes étendues dans ruby?

modules.each do |mod| 
    extend Mod.const_get(mod) 
    process(data) 
end 

Cela fonctionne bien pour la première fois, mais la méthode ne soit pas écrasé après le premier passage du boucle. J'ai essayé d'ajouter undef process comme dernière ligne à l'intérieur du bloc each mais cela n'a pas fonctionné.

Y at-il un moyen de le faire?

Répondre

2

Les modules ne peuvent être inclus qu'une seule fois dans une chaîne d'héritage.

En outre, qu'est-ce que vous faites est vraiment étrange, vous devriez penser à la refonte de votre système.

2

fait de la méthode 'process' une méthode-module (en la définissant def self.process)?

Si oui, l'envoi de la méthode « processus » directement à la constante de retour travaillerait:

modules.each do |mod| 
    Mod.const_get(mod).send(:process, data) 
end 

EDIT Venez y penser, pourquoi ne pas appeler la méthode directement?

Mod.const_get(mod).process(data) 
Questions connexes