LoginSignup
12
11

More than 5 years have passed since last update.

mruby Cheat Sheet

Last updated at Posted at 2015-12-08

この投稿は 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;
    ...

12
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11