Module: Marshal
- Defined in:
- marshal.c
Constant Summary collapse
- MAJOR_VERSION =
          major version 
- INT2FIX(MARSHAL_MAJOR) 
- MINOR_VERSION =
          minor version 
- INT2FIX(MARSHAL_MINOR) 
Class Method Summary collapse
- 
  
    
      .dump(obj[, anIO], limit = -1)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Serializes obj and all descendant objects. 
Instance Method Summary collapse
- 
  
    
      #dump(obj[, anIO], limit = -1)  ⇒ Object 
    
    
  
  
  
  
  private
  
  
  
  
    Serializes obj and all descendant objects. 
Class Method Details
.dump(obj[, anIO], limit = -1) ⇒ Object
Serializes obj and all descendant objects. If anIO is specified, the serialized data will be written to it, otherwise the data will be returned as a String. If limit is specified, the traversal of subobjects will be limited to that depth. If limit is negative, no checking of depth will be performed.
class Klass
  def initialize(str)
    @str = str
  end
  def say_hello
    @str
  end
end
(produces no output)
o = Klass.new("hello\n")
data = Marshal.dump(o)
obj = Marshal.load(data)
obj.say_hello  #=> "hello\n"
Marshal can’t dump following objects:
- 
anonymous Class/Module. 
- 
objects which are related to system (ex: Dir, File::Stat, IO, File, Socket and so on) 
- 
an instance of MatchData, Data, Method, UnboundMethod, Proc, Thread, ThreadGroup, Continuation 
- 
objects which define singleton methods 
| 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 | # File 'marshal.c', line 1172
static VALUE
marshal_dump(int argc, VALUE *argv, VALUE _)
{
    VALUE obj, port, a1, a2;
    int limit = -1;
    port = Qnil;
    rb_scan_args(argc, argv, "12", &obj, &a1, &a2);
    if (argc == 3) {
        if (!NIL_P(a2)) limit = NUM2INT(a2);
        if (NIL_P(a1)) io_needed();
        port = a1;
    }
    else if (argc == 2) {
        if (FIXNUM_P(a1)) limit = FIX2INT(a1);
        else if (NIL_P(a1)) io_needed();
        else port = a1;
    }
    return rb_marshal_dump_limited(obj, port, limit);
} | 
Instance Method Details
#dump(obj[, anIO], limit = -1) ⇒ Object (private)
Serializes obj and all descendant objects. If anIO is specified, the serialized data will be written to it, otherwise the data will be returned as a String. If limit is specified, the traversal of subobjects will be limited to that depth. If limit is negative, no checking of depth will be performed.
class Klass
  def initialize(str)
    @str = str
  end
  def say_hello
    @str
  end
end
(produces no output)
o = Klass.new("hello\n")
data = Marshal.dump(o)
obj = Marshal.load(data)
obj.say_hello  #=> "hello\n"
Marshal can’t dump following objects:
- 
anonymous Class/Module. 
- 
objects which are related to system (ex: Dir, File::Stat, IO, File, Socket and so on) 
- 
an instance of MatchData, Data, Method, UnboundMethod, Proc, Thread, ThreadGroup, Continuation 
- 
objects which define singleton methods 
| 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 | # File 'marshal.c', line 1172
static VALUE
marshal_dump(int argc, VALUE *argv, VALUE _)
{
    VALUE obj, port, a1, a2;
    int limit = -1;
    port = Qnil;
    rb_scan_args(argc, argv, "12", &obj, &a1, &a2);
    if (argc == 3) {
        if (!NIL_P(a2)) limit = NUM2INT(a2);
        if (NIL_P(a1)) io_needed();
        port = a1;
    }
    else if (argc == 2) {
        if (FIXNUM_P(a1)) limit = FIX2INT(a1);
        else if (NIL_P(a1)) io_needed();
        else port = a1;
    }
    return rb_marshal_dump_limited(obj, port, limit);
} |