まつもと ゆきひろです

In message "[ruby-ext:02202] marshal_load の書き方(Re: 質問です。)"
    on 03/08/04, Shin-ichiro HARA <sinara / blade.nagaokaut.ac.jp> writes:

|新しい、marshal_dump, marshal_load は便利ですね。
|
|で、これは拡張ライブラリからはどう使うのでしょう?例えば、次の
|サンプルで mdump, mload は正しくはどう書いたらいいですか?

  * allocation frameworkを使ってください。つまり、

      rb_define_alloc_func(クラス, 関数);

    を呼んでください。newを再定義するタイプのクラスではCレベ
    ルではmarshal_dumpは使えません。

  * mdumpは情報を表現するのに必要な任意のRubyオブジェクトを
    返してください。bodyを返すので十分であれば今の定義で十分
    です。

  * mloadはallocateされてinitializeされる前のオブジェクトに
    対して呼び出されます。ですから、allocateで構造体を割り当
    てていれば、

      ((struct RFoo*)RDATA(self)->data)->body = x;

    になるでしょうし、そうでなければ

      RDATA(self)->data)->body = foo = ALLOC(struct RFoo);
      foo->body = x;

    になるでしょう。