From: shugo@... (Shugo Maeda) Date: 1998-03-04T18:00:07+09:00 Subject: [ruby-dev:1579] Re: IO#putc/Kernel#putc/Kernel#putchar 前田です。 In message "[ruby-dev:1577] Re: IO#putc/Kernel#putc/Kernel#putchar" Yukihiro Matsumoto 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 -- 前田 修吾