Marshalling delegates

I can’t seem to marshal a delegate. The code below:

class Foo < SimpleDelegate
end

Marshal.dump(Foo.new(nil))

Gives me an error:
TypeError: singleton can’t be dumped

The weird thing is that defining _dump or marshal_dump in Foo doesn’t
make this problem go away.
Even stranger is that this error suddenly started showing up in code
that used to work… I’m not sure what may haev changed in the interim
(haven’t touched the code in a few weeks), except I may have apt-get
updated my ruby installation.

Is there any way I can dump a delegate?

Nathan

Hi,

···

In message “Marshalling delegates” on 03/11/21, Nathan Weston elbows@spamcop.net writes:

I can’t seem to marshal a delegate. The code below:

class Foo < SimpleDelegate
end

Marshal.dump(Foo.new(nil))

Gives me an error:
TypeError: singleton can’t be dumped

The weird thing is that defining _dump or marshal_dump in Foo doesn’t
make this problem go away.

It’s a bug in 1.8.0. Soon to be fixed. Thank you.

						matz.

After digging around a bit in the delegate source, I fixed the problem
like this:

class MarshalDelegator < SimpleDelegator
alias :make_methods :initialize

def marshal_dump
return @obj
end

def marshal_load(obj)
initialize(obj)
end
end

To marshal, the delegator just dumps the object it is delegating for.
To unmarshal, it loads that object, and sets up the wrapper methods by
calling initialize.

matz@ruby-lang.org (Yukihiro Matsumoto) wrote in message news:1069385366.583829.29360.nullmailer@picachu.netlab.jp

···

Hi,

In message “Marshalling delegates” > on 03/11/21, Nathan Weston elbows@spamcop.net writes:

I can’t seem to marshal a delegate. The code below:

class Foo < SimpleDelegate
end

Marshal.dump(Foo.new(nil))

Gives me an error:
TypeError: singleton can’t be dumped

The weird thing is that defining _dump or marshal_dump in Foo doesn’t
make this problem go away.

It’s a bug in 1.8.0. Soon to be fixed. Thank you.

  					matz.