From: Eric Hodel Date: 2006-03-21T16:35:33+09:00 Subject: Re: A long call chain... On Mar 20, 2006, at 10:48 PM, Benjohn Barnes wrote: > Hello everyone. I'm hoping to do something like this (and then > automate it up by putting something neat in to a mix in module)... > > class Test > def xxx; [1]; end > alias xxx_old xxx > def xxx; xxx_old + [2]; end > alias xxx_old xxx > def xxx; xxx_old + [3]; end > alias xxx_old xxx > ... > end Yuck. > In real use, these various defs and aliases would be in different > files, but would often be putting things in to the same class. The > above doesn't work - I think it's leading to a non terminating > recursive function. > > My first question is, "is it correct that this doesn't work?" The fact that this is unmaintainably difficult to do is a very, very big clue. Note also that this will break if you change the order of require, not good. > I'd like to use a mechanism like this to enable me to have a kind > of hookable function in a class. As I said, the alias process would > be encapsulated by waving my hands and working that out later, but > probably making use of method_defined. > > The mechanism allows you to build up an event handler: you send an > event to a class instance, and any receivers that are registered > for that event (by having defined the method to pick it up) will > get it. Example hookable methods for my system will be: > is_being_setup, will_be_torn_down, has_recieved_message > will_send_message. observer.rb provides something similar to what you want, event notification. > It's worth noting that the will_be methods should probably be > executed in the reverse order from that in which they are defined! > > I'm pretty sure this is a good plan, but... > > Question: "Does this seem like a good plan?" Not with random aliasing it doesn't. > Finally, as this doesn't work, can you see a nicer way to implement > it? I think I could capture the function each time it gets defined, > and put it in to class state, but it would need to be per class, I > think, rather than just on in the base class. I've thought about > several variations, but none of them seem to be very nice at all. Check out MuffDaddy: http://blog.zenspider.com/archives/2005/02/muffdaddy_the_u.html What do you want to use this for? Why? -- Eric Hodel - drbrain@segment7.net - http://blog.segment7.net This implementation is HODEL-HASH-9600 compliant http://trackmap.robotcoop.com