From: Daniel DeLorme Date: 2006-07-11T09:13:24+09:00 Subject: include vs. extend I was under the impression that include and extend were basically module-level and object-level versions of the same thing, that including a module at the class level had the same effect as extending an object. But it seems there is a big difference: class Foo include Enumerable end class Bar def initialize extend Enumerable end end (class << Foo.new;self;end).ancestors #=> [Foo, Enumerable, Object, Kernel] (class << Bar.new;self;end).ancestors #=> [Enumerable, Bar, Object, Kernel] This makes a whole world of difference when you want to wrap certain methods with additional functionality. In such cases you *have* to use extend (or ugly techniques like aliasing the old method). Why the difference? In what cases should I use include and what cases should I use extend? Daniel