From: Ueno Katsuhiro Date: 2000-06-17T10:05:19+09:00 Subject: [ruby-list:23301] Re: Ruby/zlib うえの@ぶるーすかいです。 まつもと さん wrote: > |.gz なファイルを読み書きするクラスを C で書き直しました。 > | > | http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-0.1.0.tar.gz > > RAAにも登録しませんか? それとももう登録した? (未確認) まだです。これから登録します。 # 昨日は急に眠気が… > |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です。 了解です。 ruby.h では確かに Qtrue と Qfalse は整数定数になっていますが、 それを踏まえてこうなっているのか、それとも int と VALUE を 間違えられたのか、判断しかねましたので。 > |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を要求するんですが、その辺は問題ないですか? 他の rb_io_xxx ではそのようですが、上記 4つの関数に関しては write メソッドを rb_funcall で呼んでいるだけですよね。 rb_io_addstr と rb_io_printf はいいとしても rb_io_puts と rb_io_print は C で書くと割とややこしいですから なんらかの形で io.c の外に出して頂けると有難い (有難かった?) のですが。 Ruby/zlib では io.c からコピーして使ってます。 -=====--===- うえの かつひろ @ BLUE-SKYNET --= ---=----===- http://www.blue.sky.or.jp/ -==