On 10 Aug, Yukihiro Matsumoto wrote: > Hi, > > In message "[ruby-talk:00607] How to pass by `new' method of superclass?" > on 99/08/10, clemens.hintze / alcatel.de <clemens.hintze / alcatel.de> writes: > > |I try to assimilate Python's `StringIO' class to Ruby. Now I want to > |derive `StringIO' from `IO'. So that > | > | StringIO.new.is_a? IO > > Do you really need inheritance relationship? Current Ruby requires > instances of the subclass of IO to have T_FILE structure. I don't know really. I would like it, as there may be methods, that wants to get an `IO' or a `File' instance. `mailread.rb' comes in mind (I know it is fixed yet :-) It would be nice to cheat them, and give them a `StringIO' instance instead of a `File' one. Of course, there will arise problems, if the method use the `fileno' method somehow! But perhaps if that happen, I could create a file on-the-fly, put the `StringIO' instance contents into it, and work forth as a normal file, which will be deleted after close.... :-/ That could be a good idea, couldn't it? Nevertheless, is there such a method to by-pass the `new' method of a parent? > > With dynamic typing feature, defining all the methods which IO has in > StringIO is sufficient enough, isn't it? There's no problem among > Ruby level, right? Normally not! Only if a method insists on objects beeing instances of IO. > > The method I can think of receiving IO instance (T_FILE object) as > arguments is IO::select, which of cource can't handle StringIO. But it would use `fileno' and therefore I can create a file on-the-fly? If not, overwriting select should be enough, shouldn't it? > > matz. \cle