Właśnie omijałem metaprogramowanie Ruby. Mixin / moduły zawsze potrafią mnie pomylić.
- include : miksy w określonych metodach modułów jako metody instancji w klasie docelowej
- ext : miksuje w określonych metodach modułowych jako metodach klasy w klasie docelowej
Więc czy jest to główna różnica, czy może czai się większy smok? na przykład
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!"