http://www.lostway.org/~tko/cgi-bin/bakagaiku.rb?bakaid=20051029
> む。Cでのメソッドの定義として、引数をRubyの配列で受け取るのはあるけど、 > 呼び出しではRubyの配列を渡せるものはないのか。つまり:
つ rb_apply
というのはいいとして。どうやったら 「配列を引数に渡して呼び出す rb_funcall」 という機能から rb_apply に辿りつけるかを考えてみたい。
うーん、結局ソースコードを読まないとだめそうな気がするな。 具体的にはこんなふうに見る。
~ % list-function ~/src/ruby/eval.c | grep -v '^static ' | less
:
:
VALUE rb_with_disable_interrupt(VALUE (*proc) (/* ??? */), VALUE data)
VALUE rb_apply(VALUE recv, ID mid, VALUE args)
VALUE rb_funcall(VALUE recv, ID mid, int n, ...)
VALUE rb_funcall2(VALUE recv, ID mid, int argc, const VALUE *argv)
VALUE rb_funcall3(VALUE recv, ID mid, int argc, const VALUE *argv)
VALUE rb_call_super(int argc, const VALUE *argv)
void rb_backtrace(void)
:
:
と、さりげなく list-function などという独自コマンドを使ったりして。
そのうえで ReFe で調べる。
~ % refe -e rb apply
: VALUE rb_apply(VALUE recv, ID mid, VALUE args)
オブジェクト recv のメソッド mid を
引数 args とともに呼び出します。
リファレンスマニュアルを見て調べるっても、 eval.c にありそうだ、くらいはわかってないとだめだしなあ。 もうちょっとエントリの分類とか検索について考えるべきだろうか……。
あとはあれか。以前書いた拡張ライブラリ作成マニュアル。 いま読むとけっこうアラがあるのう。
(19:50)