On Sun, 11 Jun 2006, Mark Noworolski wrote: > I have a stream I'm listening to that lots of similar things speak on, each of which also identifies itself with a unique MAC. > Say, I have 3 objects organized something like this: > Class Nic > End > > Class Nic2 < Nic > Etc. > End > > Class Nic3 < Nic2 > Etc. > End > > As time passes, when I hear a new MAC start talking, I dynamically create a > corresponding object. So, if the first thing I hear is something a Nic says, > a Nic object can spring into existence, ditto for Nic2, etc. So far, seems > reasonable. > > However, the similar things will sometimes appear as a Nic, then say > something new and exciting that indicates that they are actually Nic2 > objects (or Nic3, for example). > > The simple/crude solution is just to have one nic object with a '@type' > class variable that can get changed once new information appears. Also the > @type variable could be queried to figure out what the object is/does. > > But this just doesn't seem like the ruby way. Is there something obvious I > should be doing that is sensible and cleaner? > > The objective is for the calling routine, over time, to know what type of > objects it is talking to (and to efficiently collect the various types to > perform operations on). > > Thanks, > Mark google 'pimpl' : public interface private implimentation. a simple ruby version illustrating what you are talking about might look like this: harp:~ > cat a.rb class Nic def initialize @impl = NicImpl.new self end DELEGATE_METHODS = %w( a_method another_method ) DELEGATE_METHODS.each do |m| module_eval " def #{ m }(*a, &b) @impl.#{ m }(*a, &b) end " end def hear_something_and_become_nic2 @impl = NicImpl2.new self end def hear_something_and_become_nic3 @impl = NicImpl3.new self end end class NicImpl def initialize nic @nic = nic end def a_method 'all nics have this' end end class NicImpl2 < NicImpl def another_method 'this is a nic2' end end class NicImpl3 < NicImpl def another_method 'this is a nic3' end end nic = Nic.new p nic.a_method nic.hear_something_and_become_nic2 p nic.another_method nic.hear_something_and_become_nic3 p nic.another_method harp:~ > ruby a.rb "all nics have this" "this is a nic2" "this is a nic3" regards. -a -- suffering increases your inner strength. also, the wishing for suffering makes the suffering disappear. - h.h. the 14th dali lama