2010-11-23 5 views
1

J'ai besoin d'aide pour définir une méthode dynamique.Ruby Aide avec les méthodes dynamiques

Fondamentalement, j'ai beaucoup de classes qui résident dans un module. J'ai besoin de générer une liste de méthodes dans chaque classe en fonction d'une liste de chaînes passée, qui est spécifique à chaque classe (c'est-à-dire que différentes classes ont une liste différente de chaînes). Le corps de la méthode doit être quelque chose comme:

client.call(the_string, @an_instance_variable) 

Donc, fondamentalement, je veux créer une méthode que je peux utiliser dans chacune de ces classes qui résident dans le même module, afin de générer dynamiquement un tas de méthodes basé sur le tableau de chaînes qui a été passé.

Quelque chose comme:

register_methods @@string_array 

donc dire « nom » est une chaîne dans le tableau, il générerait une méthode en tant que telle:

def name 
    client.call("name", @an_instance_variable) 
end 

J'espère que le bon sens. Je suis perplexe après avoir essayé toutes sortes de choses pendant des heures, et j'apprécierais vraiment toute contribution. Merci!

Répondre

4

n'ont pas irb disponibles, mais cela devrait fonctionner

def register_methods strings 
    strings.each do |s| 
    define_method s.to_sym do 
     client.call("name", @an_instance_variable) 
    end 
    end 
end 
0

Je ne sais pas comment vous comptez faire utiliser le @an_instance_variable, mais vous pouvez également définir des méthodes qui prend des arguments comme ceci:

def register_methods *methods 
    methods.each do |method| 
    define_method method do |arg| 
     client.call(method, arg) 
    end 
    end 
end 

donc, si vous envoyez register_methods ("nom", "âge") vous auriez deux nouvelles méthodes qui ressemble à ceci:

def name(arg) 
    client.call("name", arg) 
end 

def age(arg) 
    client.call("age", arg) 
end 
Questions connexes