Просто оглядываясь вокруг метапрограммирования Руби. Mixin/modules всегда меня путают.
- включить: смешивает в указанных модульных методах как методы экземпляра в целевом классе
- expand: смешивает в указанных модульных методах как методы класса в целевом классе
Итак, главное отличие только этого или более крупного дракона скрывается? например.
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!"