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