obj を指定された出力先に再帰的に出力します。
ファイルに書き出せないオブジェクトをファイルに書き出そうとすると
例外 TypeError が発生します。
ファイルに書き出せないオブジェクトは以下の通りです。
- 名前のついてない Class/Module オブジェクト。(この場
合は、例外 ArgumentError が発生します。無名クラスについて
は、Module.new を参照。)
- システムがオブジェクトの状態を保持するもの。具体的には以下のイン
スタンス。Dir, File::Stat, IO とそのサブクラス
File, Socket など。
- MatchData, Data, Method, UnboundMethod,
Proc, Thread, ThreadGroup, Continuation
のインスタンス。
- 特異メソッドを定義したオブジェクト
また、これらのオブジェクトを間接的に指すオブジェクトなども書き出せ
ません。例えば、デフォルト値を求めるブロックを持った Hash は
Proc を間接的に指していることになります。
p Marshal.dump(Hash.new {})
=> -:1:in `dump': cannot dump hash with default proc (TypeError)
マーシャルの動作を任意に定義することもできます。
- [PARAM] obj:
-
ダンプする対象のオブジェクトを指定します。
- [PARAM] port:
-
IO かそのサブクラスのインスタンスを指定します。
- [PARAM] limit:
-
指定した場合、limit 段以上深くリンクしたオブジェクトを
ダンプできません。負の limit を指定すると深さチェックを行いません。
デフォルトは -1 です。
- [RETURN]
-
port を省略すると、obj をダンプした String を返します。
port を指定すると port を返します。
- [EXCEPTION] TypeError:
-
ファイルに書き出せないオブジェクトをファイルに
書きだそうとした場合に発生します。
- [EXCEPTION] ArgumentError:
-
名前の付いていない Class や Module
オブジェクトをダンプしようとした場合に発生します。
- [EXCEPTION] ArgumentError:
-
limit 段以上深くリンクしたオブジェクトをダンプしようと
した場合に発生します。
[SEE_ALSO] Object#marshal_dump, Object#marshal_load