> > Hi list
> > Ara's post about method redefinition was extremely rich intellectual
> > food, took some time to digest, but I just thought I share my findings
> > with you.
> Ara and Pit are impressive meta-coders indeed. Think Ara might even
> have a Prototype lib
> you'd enjoy.
> BTW, if we were all good little scouts and always modularized our code
> one could use:
> class Module
> # Prepend an "aspect" module to a module.
> #
> # module X
> # def x; "x"; end
> # end
> #
> # module U
> # def x; '{' + super + '}'; end
> # end
> #
> # X.prepend U
> #
> # X.x # => "{x}"
> def prepend( aspect )
> aspect.send(:include, self)
> extend aspect
> end
> end
> Another trick for common injuns:
> class Class
> # Prepend an "aspect" module to a class.
> #
> # class Firetruck
> # def put_out_fire(option)
> # "Put out #{option}"
> # end
> # end
> #
> # module FastFiretruck
> # def put_out_fire(option)
> # super("very #{option}!")
> # end
> # end
> #
> # Firetruck.prepend(FastFiretruck)
> #
> # ft = Firetruck.new
> # ft.put_out_fire('fast') #=> "Put out very fast!"
> def prepend( aspect )
> _new = method(:new)
> _allocate = method(:allocate)
> (class << self; self; end).class_eval do
> define_method(:new) do |*args|
> o = _new.call(*args)
> o.extend aspect
> o
> end
> define_method(:allocate) do |*args|
> o = _allocate.call(*args)
> o.extend aspect
> o
> end
> end
> end
> end
> Albeit that has some unfortunate shortcomings.
> T.
Well I do not really see these shortcomings, I'd love to have this
mail as a comment to my blogpost BTW, would you mind?
Go for it. The shortcoming in the later example are b/c it's static
and not dynamic, ie. it happens at the time of instantiation. So it's
not a simple thing to adjust on the fly. One could make it more
flexiable, but alas the Double Module Inclusion problem gets in the
way.
Concerning Ara's Prototype library I have seen it flying by, I will
have a closer look, sure deserves an Exolink. But probably Ara's had
all the fun for himself already and there is nothing left to do for me
:(.
Not at all, I think Ara's been looking for Prototype allies The
only problem with prototype.rb is that it's so far removed for writing
ordinary Ruby, few are willing to embrace it --it's almost like
writing in a different language.
T.
···
On Aug 3, 2:25 am, "Robert Dober" <robert.do...@gmail.com> wrote:
On 8/3/07, Trans <transf...@gmail.com> wrote:
> On Aug 2, 4:43 pm, "Robert Dober" <robert.do...@gmail.com> wrote: