Isso é útil se você está tentando criar métodos de classe metaprogramaticamente:
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
Minha resposta a seguir ...
ruby
metaprogramming
class-method
Chinasauro
fonte
fonte
singleton_class.define_method
singleton_class.define_method :loudly do |message|
etc.?Eu prefiro usar send para chamar define_method, e também gosto de criar um método metaclasse para acessar a metaclasse:
fonte
metaclass
, então é bom conhecer a abreviatura autônoma e fácil.Esta é a maneira mais simples em Ruby 1.8+:
fonte
Derivado de: Jay e Why , que também fornecem maneiras de tornar isso mais bonito.
Atualização : da contribuição da VR abaixo; um método mais conciso (contanto que você defina apenas um método desta forma) que ainda é autônomo:
mas note que usar send () para acessar métodos privados como define_method () não é necessariamente uma boa ideia (meu entendimento é que isso vai desaparecer no Ruby 1.9).
fonte
Para ser usado no Rails se você quiser definir métodos de classe dinamicamente a partir de preocupação:
fonte
Você também pode fazer algo assim sem depender de define_method:
fonte