Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Marshalモジュール
module Marshal
クラスの継承リスト: Marshal
Abstract
Ruby オブジェクトをファイル(または文字列)に書き出したり、読み戻したり する機能を提供するモジュール。
大部分のクラスのインスタンスを書き出す事ができますが、書き出しの不可能なクラスも存在します(Marshal.#dump を参照)。
ここで「マーシャルデータ」と言う用語は、Marshal.#dump が出力する文字列 を指すものとします。
モジュール関数
dump(obj, port = '', limit = -1) -> IO | String
-
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)
マーシャルの動作を任意に定義することもできます。詳細は、 [[unknown:Marshal#ユーザ定義のMarshal]] を参照してください。
- [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 段以上深くリンクしたオブジェクトをダンプしようと した場合に発生します。
load(port, proc = nil) -> object
restore(port, proc = nil) -> object
-
port からマーシャルデータを読み込んで、元のオブジェクトと同 じ状態をもつオブジェクトを生成します。
proc として手続きオブジェクトが与えられた場合には読み込んだ オブジェクトを引数にその手続きを呼び出します。
str = Marshal.dump(["a", 1, 10 ** 10, 1.0, :foo]) p Marshal.load(str, proc {|obj| p obj}) => "a" 1 10000000000 1.0 :foo ["a", 1, 10000000000, 1.0, :foo] ["a", 1, 10000000000, 1.0, :foo]
定数
MAJOR_VERSION
MINOR_VERSION
-
Marshal.#dump が出力するデータフォーマットのバージョン番号です。
Marshal.#load は、メジャーバージョンが異なるか、バージョンの大きな マーシャルデータを読み込んだとき例外 TypeError を発生させます。
マイナーバージョンが古いだけのフォーマットは読み込み可能ですが、 $VERBOSE = true のときには警告メッセージが出力されます
マーシャルされたデータのバージョン番号は以下のようにして取得するこ とができます。
obj = Object.new major, minor = Marshal.dump(obj).unpack("cc") p [major, minor]