--- Robert Klemme <bob.news / gmx.net> wrote: > Eric Mahurin wrote: > > Is there a way to make a class that looks like several > classes? > > For example: > > > > class IOArray < IO > > include Array # doesn't work because Array is not a > Module > > # use IO methods calls to accomplish the Array methods > > end > > > > I don't need multiple inheritance. All I want is these > > additional classes to appear in the ancestors list. In the > > above example, IOArray could act like an IO or an Array. > It > > looks like evil.rb might have a solution, but is there a > > non-evil way? > > class IOArray < IO > def kind_of?(cl) > Array == cl || super > end > end Yep, that is pretty obvious. I think that is all I need, but I guess overriding ancestors would complete this. > >> x=IOArray.allocate > => #<IOArray:0x10184258> > >> x.kind_of? Array > => true > > But seriously, for what do you need that? I can't think of > an application > where I would want to make something look like an Array > without being one. > Maybe it's rather Enumerable that you want? Enumerable doesn't have random access and can't modify like Array (or String). I think it would have been nice to have a module like "Indexable" that would cover common methods in Array and String. The example I have above should probably be combining an IO and a String since an IO accesses characters like a String: class IOString < IO def kind_of?(c); String==c || super; end # use IO methods (seek/tell/read/write) to accomplish # the String methods end This was just a toy example. Discover Yahoo! Get on-the-go sports scores, stock quotes, news and more. Check it out! http://discover.yahoo.com/mobile.html