Ceci est utile si vous essayez de créer des méthodes de classe de manière métaprogrammée:
def self.create_methods(method_name)
# To create instance methods:
define_method method_name do
...
end
# To create class methods that refer to the args on create_methods:
???
end
Ma réponse à suivre ...
ruby
metaprogramming
class-method
Chinasaur
la source
la source
singleton_class.define_method
singleton_class.define_method :loudly do |message|
etc.?Je préfère utiliser send to call define_method, et j'aime aussi créer une méthode de métaclasse pour accéder à la métaclasse:
la source
metaclass
, donc c'est bien de connaître le raccourci simple et autonome.C'est le moyen le plus simple dans Ruby 1.8+:
la source
Dérivé de: Jay et Why , qui fournissent également des moyens de rendre cela plus joli.
Mise à jour : à partir de la contribution de VR ci-dessous; une méthode plus concise (tant que vous ne définissez qu'une seule méthode de cette façon) qui est toujours autonome:
mais notez que l'utilisation de send () pour accéder à des méthodes privées comme define_method () n'est pas nécessairement une bonne idée (je crois comprendre que cela disparaîtra dans Ruby 1.9).
la source
A utiliser dans Rails si vous souhaitez définir dynamiquement des méthodes de classe par souci:
la source
Vous pouvez également faire quelque chose comme ça sans vous fier à define_method:
la source