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