2010-08-26 12 views
2

Aujourd'hui, je définis un ensemble de variables dans un hachage que j'utilise dans diverses fonctions sur le modèle et le contrôleur. A partir du code ci-dessous, vous voyez que je définis des fonctions comme get_stats, get_fans pour cibler la variable exacte. Ma question est, serait-il possible de définir une seule fonction?Est-il possible d'utiliser "eval" pour définir une seule fonction (par opposition à une pour chaque)?

MAINTENANT:

REQ={:USER_STATS_IN_NETWORK =>1 , 
    :FANS_IN_NETWORK => 2} 


USER_STATS_IN_NETWORK_TYPE_ID =REQ[:USER_STATS_IN_NETWORK] 
get_stats= some_function(params,USER_STATS_IN_NETWORK_TYPE_ID) 


FANS_IN_NETWORK_TYPE_ID = REQ=[:FANS_IN_NETWORK_TYPE_ID] 
get_fans= some_function(params,FANS_IN_NETWORK_TYPE_ID) 

repeat for 10-over times... 

** VEULENT Accomplir: **

REQ={:USER_STATS_IN_NETWORK =>1 , 
    :FANS_IN_NETWORK => 2} 

#get_* => return some_function(:*) , without defining all of them explicitly 
#example: get_user_stats => returns some_function(:USER_STATS_IN_NETWORK) 

Répondre

2

Vous pouvez essayer quelque chose comme ceci:

REQ.keys.each do |key| 
    self.class.send(:define_method, "get_#{key.to_s.sub(/_IN_NETWORK$/, '').downcase}") do 
    some_function(key) 
    end 
end 
+0

Merci! Dans ce cas, à quoi fait référence le "moi" dans L2? –

+0

Il se réfère à l'objet actuel. J'appelle define_method sur la classe de l'objet courant. – lest