Cuando se trata de introspección de tiempo de ejecución y generación de código dinámico, no creo que Ruby tenga rivales, excepto posiblemente para algunos dialectos de lisp. El otro día estaba haciendo un ejercicio de código para explorar las instalaciones dinámicas de ruby y comencé a preguntarme cómo agregar métodos a los objetos existentes. Aquí hay 3 formas que se me ocurrieron:¿De cuántas maneras se pueden agregar métodos a un objeto Ruby?
obj = Object.new
# add a method directly
def obj.new_method
...
end
# add a method indirectly with the singleton class
class << obj
def new_method
...
end
end
# add a method by opening up the class
obj.class.class_eval do
def new_method
...
end
end
Esto es sólo la punta del iceberg, porque todavía no he explorado varias combinaciones de instance_eval
, module_eval
y define_method
. ¿Hay algún recurso en línea/fuera de línea en el que pueda obtener más información sobre estos trucos dinámicos?