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