La metaprogramación en ruby es excelente porque la utilizo constantemente para emular la programación basada en prototipos y escribir rápidamente soluciones de prototipos a algunos problemas para probar su viabilidad. Así que me gustaría saber si hay alguna diferencia esencial entre los siguientes fragmentos de código:Métodos de singleton de Ruby con (class_eval, define_method) vs (example_eval, define_method)
(class << some_object; self; end).class_eval do
define_method(:method_name) do ... method body ... end
end
y
(class << some_object; self; end).instance_eval do
define_method(:method_name) do ... method body ... end
end
Ambas versiones del código define un método singleton y aún no han llegado contra todo lo que me ha obligado a elegir la combinación (instance_eval, define_method)
sobre la combinación (class_eval, define_method)
para definir un método singleton y me pregunto si hay alguna diferencia esencial entre los dos.
Tenga en cuenta que la mejor manera de hacer lo anterior es simplemente 'define_singleton_method (: method_name) Do ... end' –