組み込みクラス: Marshal
このクラスに関してはそれほど内容は濃くはない。
Rubyのオブジェクトは条件付きで文字列化することが出来る。ただし条件はかなり限られていて、
- 名前のついていないクラスやモジュール
- File, Dir, IOなどシステムがオブジェクトの状態を保持するもの
- MatchData, Proc, Threadクラスのインスタンス
- 特異メソッドが定義された、インスタンス
はマーシャルdumpすることができない。
いろいろ変換出来て面白い。
def dumping(arg) string1 = Marshal.dump(arg) p string1 return string1 end def loading(arg) p Marshal.load(arg) end class C def hello p "hello" end end klass = dumping(C) loading(klass).new.hello
"\x04\bc\x06C" C "hello"
rationalとかはどうなのかな。
rational = 1/3r conv = dumping(rational) loading(conv)
"\x04\bU:\rRational[\ai\x06i\b" (1/3)
Threadはやはりdumpできない。
t = Thread.new{ sleep 3000 } conv = dumping(t) loading(t).new
thread.rb:119:in `dump': no _dump_data is defined for class Thread (TypeError) from thread.rb:119:in `dumping' from thread.rb:140:in `<main>'
なるほど。