Просто се ориентирам в метапрограмирането на Ruby. Миксините/модулите винаги успяват да ме объркат.
- включване: смесва определени методи на модул като методи на екземпляр в целевия клас
- разширяване: смесва определени модулни методи като методи на клас в целевия клас
Така че основната разлика само в това ли е или дебне по-голям дракон? напр.
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!"