Ruby Extention API Reference Manual

VALUE rb_Array(VALUE obj)

objArray でない場合は to_a を使って Array に変換します。

VALUE rb_ary_aref(int argc, VALUE *argv, VALUE ary)

argc が 1 のときは ary[*argv]、 2 のときは ary[argv[0], argv[1] を返します。

VALUE rb_ary_clear(VALUE ary)

ary.clear

VALUE rb_ary_concat(VALUE ary, VALUE another)

ary.concat another

VALUE rb_ary_delete(VALUE ary, VALUE item)

ary.delete

VALUE rb_ary_entry(VALUE ary, long offset)

ary のインデックス offset の要素を返します。

インデックスが範囲を越えるときは Qnil を返します。 負のインデックスも使えます。

対応するRubyコード

ary[offset] または
ary.at(offset)

使用例

VALUE num;
num = rb_ary_entry(ary, offset); 
printf("%d\n", FIX2INT(num));

キャストを使った要素の参照方法

VALUE num = RARRAY(ary)->ptr[offset];
VALUE rb_ary_includes(ary, item)

ary.include? item

VALUE rb_ary_new()

空の Ruby の配列を作成し返します。

対応する Ruby プログラム

ary = []

使用例

VALUE ary;
ary = rb_ary_new();
VALUE rb_ary_new2(long len)

len 個の要素分だけメモリを確保した、 長さゼロの Ruby の配列を作成し返します。

対応する Ruby プログラム

ary = Array.new(len)

使用例

VALUE ary;
long len;
...
ary = rb_ary_new2(len);
VALUE rb_ary_new3(long n, VALUE i0, i1, i2...)

長さ n で要素に i0 i1 i2 …を格納した Ruby の配列を作成し返します。i0 i1 ……はちょうど n 個だけ渡さなければいけません。

対応する Ruby プログラム

ary = [i0, i1, i2...]

使用例

VALUE ary;
int i[3] = { 1, 2, 3 };
ary = rb_ary_new3(3, INT2FIX(i[0]), INT2FIX(i[1]), INT2FIX(i[2]));
VALUE rb_ary_pop(VALUE ary)

配列 ary の末尾の要素をとりのぞき返します。 配列が空のときは Qnil を返します。

使用例

VALUE val = rb_ary_pop(ary);

対応する Ruby プログラム

val = ary.pop
VALUE rb_ary_push(VALUE ary, VALUE item)

配列 ary の末尾に item を追加します。

使用例

rb_ary_push(ary, INT2FIX(3));

対応する Ruby プログラム

ary.push 3
VALUE rb_ary_shift(VALUE ary)

配列 ary の先頭の要素を取り除き返します。 空配列のときは Qnil を返します。

使用例

VALUE val = rb_ary_shift(ary);

対応する Ruby プログラム

val = ary.shift
VALUE rb_ary_sort(VALUE ary)

ary.sort

void rb_ary_store(VALUE ary, long idx, VALUE val)

配列 ary のインデックス idxval を格納します。idx が範囲を越えるときは Ruby レベルと同じく自動的にサイズが拡張されます。

対応するRubyコード

ary[idx] = val

使用例

VALUE ary;
int idx;
int n[5] = { 1, 2, 3, 4, 5 };
ary = rb_ary_new();
for (idx=0; idx<5; idx++) rb_ary_store(ary, idx, INT2FIX(n[idx])); 
VALUE rb_ary_to_s(VALUE ary)

ary.to_s

使用例

void debug_print(VALUE ary)
{
  Check_Type(ary, T_ARRAY);
  printf("%s", STR2CSTR(rb_ary_to_s(ary)));
}
VALUE rb_ary_unshift(VALUE ary, VALUE item)

配列 ary の先頭に item を挿入します。

使用例

rb_ary_unshift(ary, rb_str_new2("add"));

対応する Ruby プログラム

ary.unshift 'add'
VALUE rb_assoc_new(VALUE a, VALUE b)

[a,b] を返します。

使用例

ary = rb_assoc_new(INT2FIX(5), rb_str_new2("e"));

対応する Ruby プログラム

ary = [5, "e"]
int rb_block_given_p()

メソッドがブロック付きで呼ばれていればQtrueを返します。

int BUILTIN_TYPE(VALUE obj)

obj の構造体型 ID を返します。 SPECIAL_CONST_P(obj) が真のオブジェクトに対して使うと落ちます。

char *rb_class2name(VALUE klass)

klass の名前を返します。 返り値の内容を変更したり free してはいけません。

RSTRING(rb_class_path(klass))->ptr

と同じです。

VALUE CLASS_OF(VALUE obj)

obj のクラスを返します。

VALUE rb_class_path(VALUE klass)

klass の名前を返します.klass が無名クラスまたは 無名モジュールであるときは "#<Class 0xXXXX>" や "#<Module 0xXXXX>" のような文字列を返します。

Module#to_s と同じ結果です。

VALUE rb_const_get(VALUE klass, ID name)

定数 klass::name の値を取得します。

VALUE rb_const_get_at(VALUE klass, ID name)

クラス klass で定義された定数 name の値を取得します (祖先や外のクラスは調べない)。

void rb_const_set(VALUE klass, ID name, VALUE val)

定数 klass::name の値を val として定義します。

VALUE rb_convert_type(VALUE val, int type, const char *tname, const char *method)

オブジェクトvalをクラスtypeのインスタンスに変換します。 変換には、val.methodの戻り値が使われます。

valがもともとtypeクラスのインスタンスならvalを そのまま返します。

VALUE rb_cv_get(VALUE klass, char *name)

klass のクラス変数 name の値を 取得します。

void rb_cv_set(VALUE klass, char *name, VALUE val)

klass のクラス変数 nameval を代入します。 変数がまだ定義されていない場合は NameError を発生します。

void rb_cvar_declear(VALUE klass, ID name, VALUE val)

klass のクラス変数 nameval を代入します。

VALUE rb_cvar_get(VALUE klass, ID name)

klass のクラス変数 name の値を 取得します。

void rb_cvar_set(VALUE klass, ID name, VALUE val)

klass のクラス変数 nameval を代入します。 変数がまだ定義されていない場合は NameError を発生します。

void Data_Get_Struct(VALUE obj, type, type *svar)

Ruby のオブジェクト obj から type 型へのポインタを とりだし svar に代入します。

使用例

struct mytype {
    int i;
    char *s;
};

VALUE
my_i(self)
    VALUE self;
{
    struct mytype *m;
    Data_Get_Struct(self, struct mytype, m);
    return INT2NUM(m->i);
}
VALUE Data_Make_Struct(VALUE klass, type, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free, type *svar)

type 型の構造体をヒープに割り当ててそれへのポインタを svar に代入し、クラス klass のインスタンスである Ruby のオブジェクトを生成し、それを返します。mark free はそれぞれマーク用・解放用の関数へのポインタです。 どちらも、必要ないときはかわりに 0 を渡します。

また RUBY_DATA_FUNC の定義は以下のようです。

typedef void (*RUBY_DATA_FUNC)(void *st)

第一引数 st には svar の値が渡されます。

使用例

struct mytype {
    int i;
    char *s;
};

VALUE
my_s_new(klass)
    VALUE klass;
{
    struct mytype *dummy;
    return Data_Make_Struct(MyClass, struct mytype,
                            mark_my, free_my, dummy);
}
VALUE Data_Wrap_Struct(VALUE klass, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free, void *sval)

C の構造体 sval をラップして klass クラスの インスタンスである Ruby オブジェクトを生成し、それを返します。 markfree はそれぞれ sval のマーク用・解放用の 関数へのポインタです。どちらも、必要ないときはかわりに 0 を渡します。

また RUBY_DATA_FUNC の定義は以下のようです。

typedef void (*RUBY_DATA_FUNC)(void *st)

第一引数 st には sval が渡されます。

使用例

struct mytype {
    int i;
    char *s;
};

VALUE
my_s_new(klass)
    VALUE klass;
{
    struct mytype *m = malloc(sizeof(struct mytype));
    m->i = 0;
    m->s = 0;
    return Data_Wrap_Struct(MyClass, 0, free_my, m);
}
void rb_define_alias(VALUE klass, const char *new, const char *old)

クラス klass のインスタンスメソッド old の 別名 new を定義します。

VALUE rb_define_class(const char *name, VALUE super)

クラス super の下位クラス name を作成し返します。

VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)

クラス super の下位クラス outer::name を作成し返します。

void rb_define_global_function(const char *name, VALUE (*func)(), int argc)

関数 name を定義します。 funcargcrb_define_method と同じです。

void rb_define_method(VALUE klass, const char *name, VALUE(*func)(), int argc)

クラスklassのインスタンスメソッドnameを定義します。

argcはCの関数へ渡される引数の数(と形式)を決めます.

rb_scan_argsも参照

VALUE rb_define_module(const char *name)

モジュール name を作成し返します。

void rb_define_module_function(VALUE module, const char *name, VALUE (*func)(), int argc)

モジュール module にモジュール関数 name を定義します。 funcargcrb_define_method と同じです。

VALUE rb_define_module_under(VALUE outer, const char *name)

モジュール outer::name を作成し返します。

void rb_define_private_method(VALUE klass, const char *name, VALUE(*func)(), int argc)

クラス klass にプライベートのインスタンスメソッド name を 定義します。func に関数ポインタで与え、その関数がとる 引数のタイプを argc に渡します。argc のフォーマットに ついては rb_define_method の記述を参照してください。

void rb_define_singleton_method(VALUE obj, const char *name, VALUE (*func)(), int argc)

obj に特異メソッド name を定義します。 メソッドの実体を func に関数ポインタで与え、その関数がとる 引数のタイプを argc に渡します。argc のフォーマットに ついては rb_define_method の記述を参照してください。

VALUE rb_ensure(VALUE (*body)(), VALUE data1, VALUE (*ensure)(), VALUE data2)

ensure の C 版です。まず body(data1) を実行し、その途中で 例外や exit が起きたとしても ensure(data2) が確実に 実行されます ( body() が正常終了しても実行されます)。

VALUE rb_eql(VALUE obj1, VALUE obj2)

obj1.equal? obj2 ならば Qtrue、 そうでないならば Qfalse

VALUE rb_equal(VALUE obj1, VALUE obj2)

obj1 == obj2 ならば Qtrue、 そうでないならば Qfalse

VALUE rb_eval_string(const char *str)

str を Ruby スクリプトとしてコンパイル・評価し、 その値を返します。

VALUE rb_eval_string_protect(const char *str, int *state)

str を Ruby スクリプトとしてコンパイル・評価し、 その値を返します。

コンパイル中または評価中に例外を含む大域脱出が発生した場合、 state が NULL でなければ値が設定され Qnil を返します。

VALUE rb_eval_string_wrap(const char *str, int *state)

rb_eval_string_protectと同じですが,スクリプトの評価を 無名のモジュールのもとで行います。

int FIXNUM_P(VALUE obj)

objFixnum のインスタンスのとき真。

VALUE rb_funcall(VALUE recv, ID name, int nargs, ...)

recv に対してメソッド name を呼びだし、 メソッドの返り値を返します。プライベートメソッドも 呼びだせます。

メソッドへの引数は第四引数以降にあたえ、その数を nargs に指定します。それら引数はすべて VALUE でなければ いけません。

VALUE rb_funcall2(VALUE recv, ID name, int nargs, VALUE *args)

recv に対してメソッド name を呼びだし、 メソッドの返り値を返します。プライベートメソッドも 呼びだせます。

メソッドへの引数は VALUE の配列として第四引数にあたえ、 その長さを nargs に指定します。

VALUE rb_gc()

明示的に GC を開始する。rb_gc_disable() で禁止中のときおよび すでに GC が実行中のときは実際には行われません。

VALUE rb_gc_disable()

GC をオフにする。

VALUE rb_gc_enable()

GC をオンにする。

void rb_gc_mark(VALUE v)

Ruby のオブジェクト v をマークします。

void rb_gc_mark_maybe(VALUE v)

v が Ruby のオブジェクトだったらマークします。

void rb_gc_register_address(VALUE *addr)

ポインタ addr が指す変数を GC の対象にします。

初出: [ruby-list:20488]

void rb_gc_unregister_address(VALUE *addr)

ポインタ addr が指す変数を GC の対象から外します。

初出: [ruby-list:20488]

void rb_global_variable(VALUE *var)

rb_gc_register_address と同じ。

VALUE rb_gv_get(const char *name)

Ruby のグローバル変数の値を取得します。

使用例

VALUE v = rb_gv_get("$!")
VALUE rb_gv_set(const char *name, VALUE val)

Ruby のグローバル変数 nameval を代入します。 val を返します。

int IMMEDIATE_P(VALUE obj)

obj がポインタでも special const でもないとき真。 すなわち現在の実装では objSymbolFixnum のインスタンスであるとき真。

VALUE rb_inspect(VALUE obj)

obj.inspect

VALUE INT2FIX(int i)

31ビット以内におさまる整数を Fixnum に変換します。

VALUE INT2NUM(long i)

任意の整数を Fixnum か Bignum に変換します。

VALUE rb_Integer(VALUE obj)

obj が Ruby の整数でない場合は to_i を使って Integer に変換します。

int rb_io_mode_flags(const char *mode);

fopen(3)のようなモード指定modeをruby内部のモードフラグに 変換します。

modeは、[rwa][b][+]という文字列です(例: "rb+") 戻り値は、 FMODE_READABLE, FMODE_WRITABLE, FMODE_BINMODE, FMODE_READWRITE の論理和です。FMODE_READWRITEは、FMODE_READABLEFMODE_WRITEABLEの論理和です。

static int rb_io_mode_flags2(int mode)

open(2)のようなモード指定modeをruby内部のモードフラグに 変換します。

modeは、O_RDONLY, O_WRONLY, O_RDWRのい ずれかで 対応する以下の値のいずれかを返します。 FMODE_READABLE, FMODE_WRITABLE, FMODE_READWRITE

FMODE_READWRITEは、FMODE_READABLEFMODE_WRITEABLEの論理和です。

MS-Windowsなどファイルにバイナリ/テキスト属性の区別があるプラッ トホームでは、modeO_BINARYの論理和が指定されてい れば、戻り値にはFMODE_BINMODEの論理和が指定されます。

VALUE rb_iterate(VALUE (*call_proc)(), VALUE date1, VALUE (*block_proc)(), date2)

ブロック付きメソッド(イテレータ)呼び出しを行う関数です.

まず call_proc(data1) を実行します。そしてその関数か その直下のメソッドで yield が発生すると以下が実行されます。

block_proc(VALUE block_arg, VALUE data2, VALUE self)

block_arg はブロック引数(複数なら配列に入っている)、 data2rb_iterate() に渡したもの、 selfblock_proc 呼び出し時点での self です。

int rb_iterator_p()

この関数はobsoleteです。rb_block_given_pを使用してください。

VALUE rb_iv_get(VALUE obj, char *name)

オブジェクト obj のインスタンス変数 name の値を 取得します。

VALUE rb_iv_set(VALUE obj, char *name, VALUE val)

オブジェクト obj のインスタンス変数 nameval を代入します。

VALUE rb_ivar_get(VALUE obj, ID name)

オブジェクト obj のインスタンス変数 name の値を 取得します。

VALUE rb_ivar_set(VALUE obj, ID name, VALUE val)

オブジェクト obj のインスタンス変数 nameval を代入します。

void rb_jump_tag(int tag)

初出: [ruby-dev:4064]

rb_load_protect,rb_eval_string_protect,rb_protect などで捕捉した大域脱出を再生成します。

tagには上記関数の引数で受け取ったstateを指定します。

void rb_load(VALUE fname, int wrap)

loadの低レベルインタフェースです。Rubyスクリプ トが格納されたファイルfname をロードします。

引数wrapが、non-zeroなら無名のモジュールを生成して、ロー ドした内容をそのモジュールに閉じ込めます。閉じ込めるのは

です。グローバル変数の変更などは閉じ込められません。

参考: [ruby-list:21651]]

VALUE rb_mod_name(VALUE mod)

Module#name です。無名クラス、無名モジュールに対して 空文字列を返します。

int NIL_P(VALUE obj)

objQnil のとき真。

VALUE rb_obj_alloc(VALUE klass)

klass のインスタンスを作成する。

VALUE rb_obj_freeze(VALUE obj)

obj.freeze

VALUE rb_obj_frozen_p(VALUE obj)

obj.frozen?

VALUE rb_obj_is_instance_of(VALUE obj, VALUE klass)

obj がクラス klass のインスタンスのとき真。

VALUE rb_obj_is_kind_of(VALUE obj, VALUE klass)

obj がクラス klass およびそのサブクラスの インスタンスのとき真。

VALUE rb_obj_taint(VALUE obj)

obj.taint

VALUE rb_obj_tainted(VALUE obj)

obj.tainted?

VALUE rb_obj_untaint(VALUE obj)

obj.untaint

void rb_p(VALUE obj)

p の実体。obj を見やすく出力します。

static VALUE pipe_open(char *pname, char *mode)

popen(3)を実行します。引数pnamemodeはpopen(3)の 引数に対応します。

pnameは、実行するプロセスで"-"ならば、自身を fork(2)します。

IOオブジェクトを生成し、 mode"r"のとき、 子プロセスの標準出力を生成したIOの入力につなぎます。

mode"w"のとき、 子プロセスの標準入力を生成したIOの出力につなぎます。

mode"+"が含まれれば、子プロセスの標準入出力を 生成したIOの入出力につなぎます。

生成したIOオブジェクトを返します。(pname"-"であれば、子プロセスには、nilを返します)

VALUE rb_protect(VALUE (*proc)(), VALUE data, int *state)

初出: [ruby-dev:4064]

proc(data)実行中のあらゆる大域脱出(例外を含む)を捕捉します。

val = rb_protect(func, arg, &status);
if (status != 0) {
  puts("大域脱出が起きた");
  rb_jump_tag(status);
}
VALUE rb_require(const char *fname)

require の C 版です。feature「fname」をロードします。

VALUE rb_rescue(VALUE (*b_proc)(), VALUE data1, VALUE (*r_proc)(), VALUE data2)

b_proc(data1)を実行し、そのときに例外が発生すればr_proc(data2) を実行します。

捕捉する例外はStandardErrorのサブクラスに限られます。

VALUE rb_rescue2(VALUE (*b_proc)(), VALUE data1, VALUE (*r_proc)(), VALUE data2, ...)

b_proc(data1)を実行し、そのときに例外が発生すればr_proc(data2) を実行します。

第5引数以降の可変長引数に捕捉したい例外クラスを指定します。引数の最後は NULLで終らなければなりません。

int RTEST(VALUE obj)

objQfalse でも Qnil でもないとき真。

int SPECIAL_CONST_P(VALUE obj)

obj が実体の構造体を持たないとき真。現時点で真になるのは Qnil Qtrue Qfalse と、 FixnumSymbol のインスタンス。

char *STR2CSTR(VALUE str)

Ruby のオブジェクト str から C の文字列を取り出します。 strString でない場合は to_str によって 変換を試みます。

返り値を free したり直接書き換えたりしてはいけません。

char *rb_str2cstr(VALUE str, int *len)

strl を C の文字列に変換します。第二引数も与えると *len にバイト長を書き込みます。strString でない場合は to_str での変換を試みます。

VALUE rb_str_cat(VALUE str, const char *ptr, long len)

文字列 str に、長さ len (NUL 含まず)の C の文字列 ptr を破壊的に連結します。

VALUE rb_str_cat2(VALUE str, const char *ptr)

文字列 str に C の文字列 ptr を破壊的に 連結します。ptr はヌル終端を仮定しています。

VALUE rb_str_concat(VALUE s1, VALUE s2)

s1.concat s2

VALUE rb_str_dup(VALUE str)

文字列 str の複製を作成し返します。

VALUE rb_str_new(const char *ptr, long len)

ptr から len バイト分をコピーして Ruby の文字列を作成し返します。

rb_str_new(0,0)

は空文字列を生成して返します。

VALUE rb_str_new2(const char *ptr)

rb_str_new(ptr, strlen(ptr))

VALUE rb_str_new4(VALUE orig)

文字列 orig の変更不可能な複製を作成し返します。

VALUE rb_str_substr(VALUE str, long beg, long len)

str[beg, len]

int SYM2ID(VALUE symbol)

Symbol symbol を数値に変換します。 1.4では、FIX2INT(symbol)と同じです。

int SYMBOL_P(VALUE obj)

objSymbol のインスタンスのとき真。

VALUE rb_to_id(VALUE name)

StringFixnumSymbolID に変換します。

int TYPE(VALUE obj)

obj の構造体型 ID を返します。

VALUE UINT2NUM(unsigned long i)

任意の整数を Fixnum か Bignum に変換します。

void rb_undef_method(VALUE klass, const char *name)

クラス klass のインスタンスメソッド name を undef します。

VALUE UNIT2FIX(unsigned int i)

31ビット以内におさまる整数を Fixnum に変換します。

VALUE rb_yield(VALUE val)

yield の C 版です.val を引数にブロックを実行します. 複数の引数を与えたいときは配列に格納して渡します。

この関数を呼び出したメソッドがブロックを伴わない場合は,例外 LocalJumpError が発生します.