Estoy tratando de mezclar un módulo en una clase, y quiero que algunos de los métodos se comporten como métodos de clase y otros como métodos de instancia.clase << notación en los módulos
Sin embargo, yo no quiero tanto include
y extend
el módulo. Prefiero solo include
.
Cuando envuelvo los métodos quiero ser métodos de clase en esta notación, funciona:
class <<
# ...
end
Sin embargo, cuando se utiliza esta notación no funciona:
class << self
# ...
end
I sospeche que la palabra clave self
está estableciendo un enlace explícito al módulo, en lugar de la clase en la que se mezcla. Pero no he visto ninguna documentación que recomienda dejar la palabra clave self
desactivada cuando se utiliza la notación class <<
.
¿Alguien sabe lo que está pasando con esto?
ACTUALIZACIÓN: He aquí algunos ejemplos de código para más claridad:
module M
class <<
def class_method
puts "From inside the class_method"
end
end
def instance_method
puts "From inside the instance_method"
end
end
class Object
include M
end
class C
end
C.class_method
obj = C.new
obj.instance_method
Huh, ¿extrañé algo? 'class << end' es un error de sintaxis. – sepp2k