うえの@ぶるーすかいです。
.gz なファイルを読み書きするクラスを C で書き直しました。
http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-0.1.0.tar.gz
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;
}
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);
と手抜きができて幸せかも。
# モジュール化して頂けるともっと幸せかも?
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 ??????
-=====--===-
うえの かつひろ @ BLUE-SKYNET <unnie / blue.sky.or.jp> --=
---=----===- http://www.blue.sky.or.jp/ -==