Почему одноэлементный метод модуля не виден в нижестоящих собственных классах, где он смешивается?
Я понимаю обычный путь поиска метода, т.е.class, superclass/module, all the way up to BasicObject
, Я думал, что это верно и для одноэлементной версии цепочки, но неЭто не тот случай, когда вы смешиваете модуль в мета-цепочке. Я'Буду признателен, если кто-то может объяснить, почему в следующем примереAutomobile
модуляbanner
метод вызывается вместо его одноэлементной версии, когда я включаю этот модуль в Vehicle 'Собственный класс.
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