前田です。

In message "[ruby-dev:1577] Re: IO#putc/Kernel#putc/Kernel#putchar"
Yukihiro Matsumoto <matz / netlab.co.jp> wrote:

||io_write()で、
||
||    if (BUILTIN_TYPE(io) != T_FILE) {
||	return rb_funcall(io, id_write, 1, str);
||    }
||
||となっていたので、入れてみたのでした。
|
|ああ,io_writeはメソッドとしてだけでなく呼ばれることがあるか
|らですね.$>にIOのサブクラス以外のものを代入するとそういうこ
|らですね.$>とが起きます.

なるほど。

||# これって真だったら無限ループになったりしないのでしょうか?
|
|これが真になるということは,レシーバの構造がT_FILEでない,つ
|まりIOのサブクラスでもないので,writeメソッドを呼んでも再帰
|することはありません.

IO.dupすると再帰してしまいます(^^;

soleil[shugo]$ ruby
MyIO = IO.dup
def MyIO.new() super end                   
io = MyIO.new
io.write("foo")
-:4:in `write': stack level too deep (fatal)
        from -:4:in `write'
        from -:4:in `write'
        from -:4:in `write'
        from -:4:in `write'
        from -:4:in `write'
        from -:4:in `write'
        from -:4:in `write'
        from -:4:in `write'
         ... 12103 levels...
        from -:4:in `write'
        from -:4:in `write'
        from -:4:in `write'
        from -:4

-- 
前田 修吾