Marshaling

Hi there,

I need to dump some objects but they have references to files. These
references are not important and could be discarded before serialization so
that no TypeError raises. But if I write my _dump method to do this, I need
to make the complete serialization on my own :(((
Is there a way to mark variables not to be marshaled?
How do you solve this problem?

thanks!
Dominik

i just had this same problem yesterday… here’s the two approaches i
figured out, kind of hacky, but they work:

/usr/home/howardat/eg/ruby > cat marshal.rb
#!/usr/bin/env ruby

class Foo
attr_accessor :io
attr_accessor :stuck_out_tongue:
attr_accessor :m
def initialize p=FILE, m=‘w’; @io = open (@p=p), (@m=m); end
end

f = Foo.new
f.io = nil
p Marshal.load Marshal.dump f

class Bar < Foo
attr_accessor :args
def initialize(*args)
@args = args
super *args
end
def _dump d
Marshal.dump args
end
class << self
def _load s
new *(Marshal.load s)
end
end
end

b = Bar.new FILE, ‘w’
p Marshal.load Marshal.dump b

/usr/home/howardat/eg/ruby > ruby marshal.rb
#<Foo:0x40182af0 @io=nil, @m=“w”, @p=“marshal.rb”>
#<Bar:0x401827e4 @io=[#<File:0x40182780>, “w”], @args=[“marshal.rb”, “w”], @m=“w”, @p=“marshal.rb”>

the first method ‘marks’ vars not to be dumped with nil, the other remembers
the args passed to initialize and simply re-creates the object. note that you
cannot (easily) use _dump() to do the first since

def _dump depth
@dont_dump = nil
Marshal.dump self
end

will recurse.

an argument to Marshal.dump, which meant ‘mark anything which cannot be dumped
as nil’ would be most useful IMHO…

-a

···

On Sat, 31 May 2003, Dominik Werder wrote:

Hi there,

I need to dump some objects but they have references to files. These
references are not important and could be discarded before serialization so
that no TypeError raises. But if I write my _dump method to do this, I need
to make the complete serialization on my own :(((
Is there a way to mark variables not to be marshaled?
How do you solve this problem?

Ara Howard
NOAA Forecast Systems Laboratory
Information and Technology Services
Data Systems Group
R/FST 325 Broadway
Boulder, CO 80305-3328
Email: ara.t.howard@noaa.gov
Phone: 303-497-7238
Fax: 303-497-7259
~ > ruby -e ‘p % ^) .intern’
====================================

Dominik Werder dwerder@gmx.net wrote in message news:oprp1eimanjh6mnk@mail.gmx.net

Hi there,

I need to dump some objects but they have references to files. These
references are not important and could be discarded before serialization so
that no TypeError raises. But if I write my _dump method to do this, I need
to make the complete serialization on my own :(((
Is there a way to mark variables not to be marshaled?
How do you solve this problem?

thanks!
Dominik

You could try getting rid of the TypeError like this:

class File
def _dump(depth)
“”
end
class <<self
def _load(str)
nil
end
end
end

Stephen.
± S.D.Sykes - www.stephensykes.com - +358 50 577 3879 -
ruby -e ‘_=2;"||25~!A59(1A~47!K~#-6<.A~".scan(/./){
putc$&>$`?$/:
+=$&[0]-?4}’