elbows
11/28/2003 11:04:00 PM
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.