From: SonOfLilit Date: 2007-02-18T21:11:56+09:00 Subject: Re: More flexible inheritance Hey, how about a new #include variant that does alias magic whenever a method exists in both the class and the mixin module? Aur Saraf On 2/18/07, SonOfLilit wrote: > Wouldn't this hurt performance a lot? For each and every message > passed, one more step in lookup. > > I don't know. > > Aur Saraf > > On 2/18/07, Trans wrote: > > A notion came to me yesterday with regards to how we extend classes. > > On the one hand we can create a module and include it into a class, > > but this will not allow us to override a preexisting method -- for > > that we must reopen the class and play the alias and/ or binding game. > > Various ideas have been put forth for simplifying and improving the > > robustness of this, from #wrap_method, alias_method_chain, as well > > as :pre, :post methods and my own cuts (albeit they go a bit further > > than just method wrapping). But occurs to me that these add > > complexities onto something that is already straightforward if we are > > willing to separate out all class concerns into modules. In other > > words instead of writing: > > > > class X > > def a; "a"; end > > end > > > > write: > > > > module Xa > > def a; "a"; end > > end > > > > class X > > include Xa > > end > > > > X.new.a #=> "a" > > > > Then it's easy enough to overlay new behaviors: > > > > module Xb > > def a; "{"+super+"}"; end > > end > > > > class X > > include Xb > > end > > > > X.new.a #=> "{a}" > > > > Since that works so well, it occurs to me, why not make this the > > fundamental behavior of defining a class? In other words defining a > > class: > > > > class X > > def a; "a"; end > > end > > > > could be equivalent to writing: > > > > class X > > include( Module.new{ > > def a; "a"; end > > } ) > > end > > > > So there would always be a module involved in the definition of a > > class. And classes become simply containers of modules. > > > > T. > > > > > > >