Я просто разбираюсь в метапрограммировании 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!"