From: Caleb Clausen Date: 2010-03-24T07:45:51+09:00 Subject: Re: Module A extends Moudle B possible? On 3/23/10, Robert Klemme wrote: > On 03/23/2010 03:11 AM, Smart RoR wrote: >> Can Modules extends within themselves? >> >> Like Class A < B is Valid, where B is another class >> Module X < Y is invalid, where Y is another module? > > Not directly. But you can use #included like this: > > irb(main):001:0> module A; end > => nil > irb(main):002:0> module B > irb(main):003:1> def self.included(cl) > irb(main):004:2> cl.class_eval { include A } > irb(main):005:2> end > irb(main):006:1> end > => nil > irb(main):007:0> class X > irb(main):008:1> include B > irb(main):009:1> end > => X > irb(main):010:0> X.ancestors > => [X, A, B, Object, Kernel, BasicObject] > irb(main):011:0> > > Note however that the inheritance order is reversed. There are a number > of other ways to achieve what you want. The requirement does not seem > to come up very frequently though. So maybe it's not an issue as big as > you think. Am I missing something? Why not just include A from B? Like this: irb(main):001:0> module A; end => nil irb(main):002:0> module B include A end => B irb(main):003:0> class X irb(main):004:1> include B irb(main):005:1> end => X irb(main):006:0> X.ancestors => [X, B, A, Object, Kernel] irb(main):007:0>