Когда вы включаете модуль, его методы НЕ заменяют методы, определенные в этом классе, а скорее внедряются в цепочку наследования. Поэтому, когда вы вызываете super
, вызывается метод из включенного модуля.
Они будут вести себя почти так же, как и другие модули. Когда модуль включается, он помещается прямо над классом в цепочке наследования, а над ним располагаются существующие модули. Смотрите пример:
module Mym
def hello
puts "am in the module"
end
end
module Mym2
def hello
puts "am in the module2"
super
end
end
class Myc
include Mym
include Mym2
def hello
puts "im in a class"
super
end
end
puts Myc.new.hello
# im in a class
# am in the module2
# am in the module
Подробнее см. в этом посте .
Также прочитайте это: http://rhg.rubyforge.org/chapter04.html