From: matz@... (Yukihiro Matsumoto) Date: 2003-07-28T21:22:52+09:00 Subject: [ruby-dev:20963] Re: $stdin (Re: ruby 1.8.0 preview5) まつもと ゆきひろです In message "[ruby-dev:20961] $stdin (Re: ruby 1.8.0 preview5)" on 03/07/28, Kazuhiro Yoshida writes: |ええと、CVS版での報告でかまいませんか。 |$def{out,err} は obsolete ですか? |$stdin に設定するオブジェクトに必要な条件がよくわかんないです。 まず、$defout, $deferrはobsoleteにしようと思ってます。新しい $stdin, $stdout, $stderrと役割が重複するので。 次に$stdinがどんなメソッドを持つべきかですが、残念なことに入 力の方はどれかひとつのメソッドに還元して効率よく実行すること は不可能ですので、ARGFに呼び出されたメソッドがそのまま呼び出 されます。ARGF.getcは$stdin.getcを呼び出しますし、ARGF.gets は$stdin.getsを呼び出します。 代入時にreadのチェックをしているのは(実はちょっと迷ったので すが)読み込みメソッドの代表としてチェックしているだけです。 |知りたいのは、$stdinに設定するオブジェクトの必要十分条件。 |今のところ |* IOからの継承は必要ない |* readメソッドを定義する |* getsを呼び出すときはgetsメソッドが必要 |こういう条件になっているように思います。 |ではほかに必要なメソッドは何か? ということが気になります。 ということで答えになってますか。ARGFの(内部で転送している)メ ソッドのリストは gets, readline, readlines, getc, readchar, tell, seek, pos=, rewind, fileno, to_io, eof, each_line, each_byte, binmode, closed? になります。ただ、filenoとかto_ioとはIOのサブクラスでないと 意味がないので、定義しない(呼び出されたらあきらめてエラー)で いいんじゃないかと思います。その他もどの程度カバーするかで決 めればよいと思います。 まつもと ゆきひろ /:|)