Ola Bini vient de publier un article très bien fait sur les différentes façons disponibles en Ruby pour la création dynamique de méthodes.
Pour cela, il envisage trois voies : le def classique, la méthode define_method ou l'une de ces deux dans un eval. Plusieurs paramètres importants dans le choix de la méthode utilisée :
Pour cela, il envisage trois voies : le def classique, la méthode define_method ou l'une de ces deux dans un eval. Plusieurs paramètres importants dans le choix de la méthode utilisée :
- Performances (à ce titre, voir cet article déconseillant l'usage de la métaprogrammation...)
- Portée lexicale
- Fuites mémoires
De façon assez amusante, il recommande pour des questions de vitesse, surtout, d'utiliser en priorité le def classique. Juste pour l'exemple, voici le code d'une définition par def, dans un eval :
class Foo
end
bar = Foo.new
method_name = :something
eval "def bar.#{method_name}; puts 'Hi !'; end"
bar.method(method_name).call
#=> Hi !
1 commentaires:
Le Retour du Jedaye...
Enregistrer un commentaire