ts wrote: >>>>>> "D" == Daniel Schierbeck <daniel.schierbeck / gmail.com> writes: > > D> As you can see, Module#append_features doesn't call the .included method > D> on the module, include does. > > Well, it's best to see it like this : > > moulon% cat b.rb > #!/usr/bin/ruby > module M > def self.included(klass) > puts "Included in #{klass}" > end > def a > puts "a" > end > end > > class A > include M > end > > A.new.a > moulon% > > moulon% ./b.rb > Included in A > a > moulon% > > moulon% cat b.rb > #!/usr/bin/ruby > module M > def self.append_features(klass) > puts "Included in #{klass}" > end > def a > puts "a" > end > end > > class A > include M > end > > A.new.a > moulon% > > moulon% ./b.rb > Included in A > /b.rb:15: undefined method `a' for #<A:0xb7d64b38> (NoMethodError) > moulon% > > > Guy Decoux Um, yeah. `append_features' does the actual work (appending the methods of a module to a class/module), `include' just calls `append_features' and then `included'. class Module def include(*mods) mods.each do |mod| mod.append_features(self) mod.included(self) end end end Cheers, Daniel