すごくメモ帳

すごくほぼメモ帳ぐらいなブログ

Rubyの拡張ライブラリー入門シリーズ⑤ (メソッド呼び出し: rb_funcall)

メソッドの呼び出し方法

メソッドはrb_funcall()で呼び出します。

VALUE rb_funcall(レシーバー, mid, 引数の数, 引数...);

というふうにします。

midはメソッドのIDで、rb_intern()で取得できるので、

VALUE rb_funcall(レシーバー, rb_intern("メソッド名"), 引数の数, 引数...);

というふうにします。

hello = "Hello, world"
Kernel.p(hello)

このRubyのプログラムをC言語に書き換えると以下のようになります。

#include <ruby.h>

void Init_Test(void){
    VALUE hello = rb_str_new2("Hello, world!!");
    rb_funcall(rb_mKernel, rb_intern("p"), 1, hello);
}