Esto es útil si está intentando crear métodos de clase metaprogramáticamente:
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
Mi respuesta a seguir ...
ruby
metaprogramming
class-method
Chinasaurio
fuente
fuente
singleton_class.define_method
singleton_class.define_method :loudly do |message|
etc.?Prefiero usar enviar para llamar a define_method, y también me gusta crear un método de metaclase para acceder a la metaclase:
fuente
metaclass
, por lo que es bueno saber la abreviatura fácil e independiente.Esta es la forma más sencilla en Ruby 1.8+:
fuente
Derivado de: Jay and Why , quienes también brindan formas de hacer esto más bonito.
Actualización : de la contribución de VR a continuación; un método más conciso (siempre que solo esté definiendo un método de esta manera) que aún es independiente:
pero tenga en cuenta que usar send () para acceder a métodos privados como define_method () no es necesariamente una buena idea (tengo entendido que desaparecerá en Ruby 1.9).
fuente
Para ser utilizado en Rails si desea definir métodos de clase dinámicamente por preocupación:
fuente
También puede hacer algo como esto sin depender de define_method:
fuente