From: matz@... (Yukihiro Matsumoto) Date: 2000-06-16T22:53:44+09:00 Subject: [ruby-list:23286] Re: Ruby/zlib まつもと ゆきひろです In message "[ruby-list:23284] Ruby/zlib" on 00/06/16, Ueno Katsuhiro writes: |.gz なファイルを読み書きするクラスを C で書き直しました。 | | http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-0.1.0.tar.gz RAAにも登録しませんか? それとももう登録した? (未確認) |Ruby/zlib を書いている時にいくつか気になった点があるので列挙します。 | |1. eval.c 内の rb_respond_to の定義なんですが、 | これだと int ではなくて VALUE では? | | int | rb_respond_to(obj, id) | ..snip.. | { | if (rb_method_boundp(CLASS_OF(obj), id, 0)) { | return Qtrue; | } | return Qfalse; | } rb_respond_to()はCから真偽判定のため呼ばれることを想定してい ます。だからint。Qtrue, Qfalseは整数定数なのでintでOKです。 | |2. io.c 内の rb_io_puts や rb_io_print 等が static に | なっていますけど、static でなければ | | klass = rb_define_class("Hoge", rb_cObject); | rb_define_method(klass, "write", hoge_write); | rb_define_method(klass, "<<", rb_io_addstr); | rb_define_method(klass, "printf", rb_io_printf); | rb_define_method(klass, "puts", rb_io_puts); | rb_define_method(klass, "print", rb_io_print); | | と手抜きができて幸せかも。 | # モジュール化して頂けるともっと幸せかも? rb_io_xxxはT_FILEを要求するんですが、その辺は問題ないですか? |3. IO#rewind と IO#lineno について。 | | f = open("hoge") | p f.lineno # => 0 | f.gets | f.gets | p f.lineno # => 2 | f.rewind | p f.lineno # => 2 ?????? 対応した方が良さそうですね。 まつもと ゆきひろ /:|}