¿Por qué el método de singleton de un módulo no es visible en las clases de eigencas posteriores donde se mezcla?
Entiendo la ruta de búsqueda de método regular, es decir,class, superclass/module, all the way up to BasicObject
. Pensé que también era cierto para la versión singleton de la cadena, pero no parece ser el caso cuando se mezcla un módulo en la meta-cadena. Apreciaría si alguien pudiera explicar por qué en el siguiente ejemplo.Automobile
módulo debanner
El método se llama en lugar de su versión singleton cuando he incluido este módulo en la clase de eigenclatura del vehículo.
module Automobile
def banner
"I am a regular method of Automobile"
end
class << self
def banner
"I am a singleton method of Automobile"
end
end
end
class Vehicle
def banner
"I am an instance method of Vehicle"
end
class << self
include Automobile
def banner
puts "I am a singleton method of Vehicle"
super
end
end
end
class Car < Vehicle
def banner
"I am an instance method of Car"
end
class << self
def banner
puts "I am a singleton method of Car"
super
end
end
end
puts Car.banner
# I am a singleton method of Car
# I am a singleton method of Vehicle
# I am a regular method of Automobile