.\" C-IF - -*- Text -*- created at: Tue Oct 12 14:15:00 JST 1993 Ruby-C インターフェース 型 VALUE Rubyオブジェクトを表現する型. 必要に応じてキャストして用いる. 組み 込み型を表現するCの型はruby.hに記述してあるRで始まる構造体である. VALUE型をこれらにキャストするためにRで始まる構造体名を全て大文字に した名前のマクロが用意されている. 変数・定数 Qnil 定数: nilオブジェクト Qself 変数: 現在のselfオブジェクトの値. 一般にメソッドにはselfを指す引数 が与えられるので, この変数にアクセスする必要はない. この変数の値を 変更する時は以後のselfの値そのものが変わってしまうので, 特別な事情 がない限り代入してはならない. TRUE 定数: tオブジェクト(真のデフォルト値) FALSE 定数: nilオブジェクト クラス・モジュール定義 VALUE rb_define_class(char *name, VALUE super) superのサブクラスとして新しいRubyクラスを定義する. VALUE rb_define_module(char *name) 新しいRubyモジュールを定義する. void rb_include_module(VALUE class, VALUE module) モジュールをインクルードする. classがすでにmoduleをインクルードして いる時には何もしない(多重インクルードの禁止). 大域変数 void rb_define_variable(char *name, VALUE *var, VALUE (*get_hook), VALUE (*set_hook)(), void *data) RubyとCとで共有するグローバル変数を定義する. get_hookがQnilでない時, 変数参照の際にget_hookにセットされた関数が呼ばれる. set_hookがQnil でない時には代入の時にset_hookが呼ばれる. hook関数には変数名を示す ID,(set hookの場合新しい値も)とともにdataで与えたデータが引数とし て渡される. 変数名が`$'で始まらない時には自動的に追加される. 変数名としてrubyの 識別子として許されない文字(例えば` ')を含む場合にはrubyプログラムか らアクセスできなくなる. void rb_global_variable(VALUE *var) GCのため,Rubyプログラムからはアクセスされないが, Rubyオブジェクト を含む大域変数をマークする. void rb_read_only_hook() 読み出し専用の変数のためのset_hook関数. 値を設定しようとすると例外 を発生させる. クラス定数 void rb_define_const(VALUE class, char *name, VALUE val) クラス定数を定義する. メソッド定義 rb_define_method(VALUE class, char *name, VALUE (*func)(), int argc) メソッドを定義する. argcはselfを除く引数の数. argcが-1の時, 関数に は引数の数(selfを含まない)を第1引数, 引数の配列を第2引数とする形式 で与えられる(第3引数はself). argcが-2の時, 引数はself, args(argsは 引数を含むrubyの配列)という形式で与えられる. rb_define_single_method(VALUE class, char *name, VALUE (*func)(), int argc) 特異メソッドを定義する. 引数はrb_define_method()と同じ. rb_scan_args(int atgc, VALUE *argv, char *fmt, ...) argc,argv形式で与えられた引数を分解する. fmtは必須引数の数, 付加引 数の数, 残りの引数があるかを指定する文字列で, "数字数字*"という形式 である. 2 番目の数字と"*"はそれぞれ省略可能である. 必須引数が一つ もない場合は0を指定する.第3引数以降は変数へのポインタで, 該当する 要素がその変数に格納される. 付加引数に対応する引数が与えられていな い場合は変数にQnilが代入される. Rubyメソッド呼び出し VALUE rb_funcall(VALUE recv, ID mid, int narg, ...) メソッド呼び出し. 文字列からmidを得るためにはrb_intern()を使う. VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv) メソッド呼び出し. 引数をargc,argv形式で渡す. VALUE rb_eval_string(char *str) 文字列をrubyとスクリプトしてコンパイル・実行する. ID rb_intern(char *name) 文字列に対応するIDを返す. char *rb_id2name(ID id) IDに対応する文字列を返す(デバッグ用). char *rb_class2name(VALUE class) classの名前を返す(デバッグ用). classが名前を持たない時には, 一番近 い名前を持つクラスの名前を返す. インスタンス変数 VALUE rb_iv_get(VALUE obj, char *name) objのインスタンス変数の値を得る. `@'で始まらないインスタンス変数は Rubyプログラムからアクセスできない. VALUE rb_iv_set(VALUE obj, char *name, VALUE val) objのインスタンス変数をvalにセットする. 制御構造 VALUE rb_iterate(VALUE (*func1)(), char *arg1, VALUE (*func2)(), char *arg2) func2をブロックとして設定し, func1をイテレータとして呼ぶ. func1に は arg1が引数として渡され, func2には第1引数にイテレータから与えられ た値, 第2引数にarg2が渡される. VALUE rb_yield(VALUE val) valを値としてイテレータブロックを呼び出す. VALUE rb_resque(VALUE (*func1)(), char *arg1, VALUE (*func2)(), char *arg2) 関数func1をarg1を引数に呼び出す. func1の実行中に例外が発生した時に は func2をarg2を引数として呼ぶ. 戻り値は例外が発生しなかった時は func1の戻り値, 例外が発生した時にはfunc2の戻り値である. VALUE rb_ensure(VALUE (*func1)(), char *arg1, VALUE (*func2)(), char *arg2) 関数func1をarg1を引数として実行し, 実行終了後(たとえ例外が発生して も) func2をarg2を引数として実行する. 戻り値はfunc1の戻り値である(例 外が発生した時は戻らない). 例外・エラー void Warning(char *fmt, ...) 標準エラー出力に警告情報を表示する. 引数はprintf()と同じ. void Fail(char *fmt, ...) 例外を発生させる. 引数はprintf()と同じ. void Fatal(char *fmt, ...) 致命的例外を発生させる. 通常の例外処理は行なわれず, インタープリタ が終了する(ただしensureで指定されたコードは終了前に実行される). void Bug(char *fmt, ...) インタープリタなどプログラムのバグでしか発生するはずのない状況の時 呼ぶ. インタープリタはコアダンプし直ちに終了する. 例外処理は一切行 なわれない. rubyの初期化・実行 void ruby_init(int argc, char **argv, char **envp) rubyインタプリタの初期化を行なう. void ruby_run() rubyインタプリタを実行する. void ruby_script(char *name) rubyのスクリプト名($0)を設定する. /* * Local variables: * fill-column: 70 * end: */