Просто разбираюсь в метапрограммировании Ruby. Миксин / модули всегда меня смущают.
- include : миксы в указанных методах модуля как методы экземпляра в целевом классе
- extend : смешивает в указанных методах модуля как методы класса в целевом классе
Значит, главное отличие в этом или скрывается больший дракон? например
module ReusableModule
def module_method
puts "Module Method: Hi there!"
end
end
class ClassThatIncludes
include ReusableModule
end
class ClassThatExtends
extend ReusableModule
end
puts "Include"
ClassThatIncludes.new.module_method # "Module Method: Hi there!"
puts "Extend"
ClassThatExtends.module_method # "Module Method: Hi there!"