この投稿は mruby Advent Calendar 2015 の 9 日目の記事です。
この Cheat Sheet の説明
mrubyのmrbgemsを開発する上で、つい忘れがちなことをまとめています。
mrbgems を開発する際に手元に表示して、見るようにしたりしています。細かい動作などが気になってしまった場合はソースコードを見るしかありませんが、記憶から引っ張り出せる程度に記述するようにしています。
最近 mruby のソースコードのコメントが充実しているようで、それを見ると何をするものなのかが分かるようになっています。
また、rubyでC拡張ライブラリを書いたことがあるなら、それほど抵抗のなくmrubyの拡張ライブラリも書けると思います。
Class / Module を定義する
mrb_define_module(); // モジュールを定義する
mrb_define_class(); // クラスを定義する
mrb_define_class_method(); // クラスメソッドを定義する
mruby 変数を生成する
mrb_value = mrb_nil_value(); // nil
mrb_bool = mrb_true_value(); // true
mrb_bool = mrb_false_value(); // false
mrb_value mrb_fixnum_value(30); // 数値
mrb_value mrb_str_new_cstr(mrb, "Come on!"); // 文字列
// 配列
mrb_value array;
array = mrb_ary_new(mrb);
mrb_ary_push(mrb, array, mrb_true_value());
// ハッシュ
mrb_value hash;
hash = mrb_hash_new(mrb);
mrb_hash_set(mrb, hash, mrb_str_new_cstr(mrb, "key1"), mrb_fixnum_value(22));
メソッドの引数を mrb_value で受け取る
mrb_value val;
mrb_get_args(mrb, "o", &val);
mrb_get_args() で受け取る型を指定する
mrb_get_args()
に渡す mrb_args_format
は以下を参照。
mruby/mruby.h at master · mruby/mruby
nil かどうか
if (mrb_nil_p(val)) {
// 'val' is nil
}
mrb_value の文字列を C 文字列に変換する
char *p;
mrb_int len;
mrb_value val;
mrb_get_args(mrb, "S", &val);
p = RSTRING_PTR(val);
len = RSTRING_LEN(val);
mrb_value 変数の型に合わせて処理をする
mrb_value val;
switch (mrb_type(val)) {
case MRB_TT_STRING:
...
break;
case MRB_TT_FALSE:
...
break;
case MRB_TT_TRUE:
...
break;
case MRB_TT_FIXNUM:
...
break;
...