From: Robert Dober Date: 2007-07-25T22:58:15+09:00 Subject: Re: Help: Get list of modules which are included in the class On 7/25/07, dohzya wrote: > Le mercredi 25 juillet 2007 � 20:04 +0900, FireAphis a �crit : > > There is another problem. If C2 doesn't inherit another class but does > > include the modules and those modules by themselves include modules > > then your code, still, will return the whole hierarchy. Look at this: > > > > module M1; end > > module M2; include M1; end > > class C2; include M2; end > > > > p (C2.ancestors - [C2] - C2.superclass.ancestors) # => [M1, M2] > > > > That's because C2.superclass => Object > > > > :( > > > > FireAphis > > You're right, but it can be fixed :) no it cannot :(, look at C4 below > --- > class Class > def included_modules > c = self > all = c.ancestors - [c] > bad = all.map {|a| > a.ancestors - [a] > } > # Module#superclass doesn't exist > bad << c.superclass if c.is_a? Class > all - bad.flatten > end > end > > module M1; end > module M2; include M1; end > module M3; end > module M4; include M3; end > module M5; end > module M6; include M5; end > module M7; end > class C1; include M2; end > class C2 class C3 > p C3.included_modules # => [M7, M6] > > > --- > sorry if I've sent 3 messages, I'm fighting with my mail client... > > -- > Etienne > > > -- I always knew that one day Smalltalk would replace Java. I just didn't know it would be called Ruby -- Kent Beck