From: "juan pedro meriƱo" Date: 2007-06-22T05:23:05+09:00 Subject: Re: Modular classes and avoiding extension clashes ------=_Part_153073_19715328.1182457387201 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Content-Disposition: inline I have ruby in my linux, but i don't know how do start to ruby for web, please how i make it? 2007/6/21, Trans : > > I refer back to: > > Ruby-talk: 240334 > > > > http://groups.google.com/group/ruby-talk-google/browse_thread/thread/9dbe= 8cd0898227b5/409301042321f6fc?lnk=3Dgst&q=3Dopen+class+module+trans&rnum=3D= 2&hl=3Den#409301042321f6fc > > I've thought of another potential benefit of this approach. While I > had believed it would be only reasonable to have a single anonymous > module per class, there may be greater benefit in multiple modules. B/ > c, it may make possible the avoidance of extension clashes. Here's an > example: > > # friend1.rb > class String > def exclaim; self + '!'; end > def scream; exclaim + '!!'; end > end > ... > > # friend2.rb > class String > def exclaim; puts self + '!'; end > def scream; exclaim; exclaim; end > end > ... > > # elsewhere.rb > require 'firend1' > require 'firend2' > > Clearly there's a conflict. How can I use friend1#scream but also > friend2#scream? One's first thought could well be to alias the method > so it's under a different name: > > # elsewhere.rb > require 'firend1' > > class String > alias :friend1scream, :scream > end > > require 'friend2' > > "hey".firend1scream > > However, #exclaim is called by #scream so it will still not work as > expected. > > So getting back to the original suggestion (of the previous thread), > having open extensions contained in hidden modules... what if method > lookup followed a route of first checking within the same module, then > continuing upward before dropping back to ancestors? In other words if > we had a class, C < M1 < M2 and a method was called on it that is > defined in M2, then any method the M2 method calls would first be > looked for in M2, then M1, before falling back to Object and Kernel. > This would resolve the problem with the above example. > > It seems to me this is not necessarily unexpected behavior either. If > I create a method A that depends on a another method B, clearly > overriding B is dangerous business --it's something not generally > done. Usually it's the "top most" methods --the ones that depend on > others, that we override. That's not to say there aren't cases to do > so, but in that case a 'redef' keyword could be used explicitly. > > T. > > > --=20 Juan Pedro Meri=F1o Diaz Ing de Sistema CURN ------=_Part_153073_19715328.1182457387201--