概要
NativeExtensions で作ったライブラリでも Ruby 側で使うときは method chain 的にドットを使ってメンバなどを参照したいです
そんな場合に使えるサンプルを紹介します
環境
- macOS 10.14.3
- Ruby 2.5.1p57
サンプルコード
ポイントは wrap_chain
関数が self
を return している点です
こうすることで別のメソッドをドットで繋げてコールすることができます
static VALUE wrap_chain(VALUE self, VALUE _name) {
MyStruct *s;
Data_Get_Struct(self, MyStruct, s);
char *name = StringValuePtr(_name);
s->name1 = name;
return self;
}
static VALUE wrap_name(VALUE self) {
MyStruct *s;
Data_Get_Struct(self, MyStruct, s);
return rb_str_new2(s->name1);
}
ちなみに MyStruct
は以下のような感じです
typedef struct {
char *name1;
} MyStruct;
使う
こんな感じで chanin.name
という感じで参照できます
chain が Qnil
を返すような関数にすると再度 cli から参照する必要があります
cli = FirstExt.new
puts cli.chain("hawksnowlog").name
0 件のコメント:
コメントを投稿