まつもと ゆきひろです

In message "[ruby-ext:00334] Some questions about extenstion libraries"
    on 99/07/22, Tomoyuki Kosimizu <greentea / fa2.so-net.ne.jp> writes:

|まず、Cコードで`require'したいのですが、それらしき関数を見つけることが
|できませんでした。そこで、Init_XXX()で:
|
|  rb_eval_string("require 'foo'");
|
|とやりました。

すでに中村さんからきてますが、rb_f_require()ですね。
近いうちに rb_require() とかできるかもしれませんが、とりあえ
ずこっちを使ってください。なくなることはないでしょう。

|次に、Cコードで、built-inでないクラスからインスタンスを作ろうと思い、
|ruby.hを調べました。NEWOBJとOBJSETUPが見つかったのですが、使い方が理解
|できず、結局:
|
|  rb_eval_string("Foo.new");
|
|とやりました。

  rb_funcall(cFoo,rb_intern("new"), 0, 0)

とどっちがお得か。

|さらに、Cコードでの例外についてです。built-inでない例外クラスをraiseし
|たいのですが、rb_raiseは、例外クラスのVALUEを必要とします。そこで:
|
|  rb_raise(rb_eval_string("MyException"), "exception occured");
|
|とやりました。

MyExceptionは参照できないんですか? Rubyで定義してあるのかな?
なら

  if (!eMyException)
    eMyException = rb_eval_string("MyException");
  rb_raise(eMyException, "exception occured");

ではダメ?

|最後に、CコードのメソッドとRubyコードのメソッドを合わせ持った1つのク
|ラスを作ることは許されないのでしょうか?

もう答えは出ましたね。「再定義する」です。

                                まつもと ゆきひろ /:|)