On 06/02/2011 07:07 PM, Joey Zhou wrote:
> Some objects can not be marshaled. Maybe there should be a method to tell it.
>
> hash = Hash.new {|h,k| k * 2}
>
> this hash can't be marshaled because it has a default proc. If existing such method:
>
> Marshal.marshalable?(hash) #=>  method "Marshal.marshalable?"
> hash.marshalable? #=>  method "Kernel#marshalable?"

What would it do in this case?

hash = Hash.new {|h,k| k * 2}
[hash].marshalable?

So the method needs to recurse arbitrarily deep. So #marshalable will 
need to know just as much as Marshal.dump itself does about the object 
references contained in an object. Abstracting this out of Marshal.dump 
will be complex and will depend on external libraries and gems, which do 
custom dumping.

Why not just marshal and rescue?