From: Austin Ziegler Date: 2011-06-04T10:14:01+09:00 Subject: [ruby-core:36729] Re: [Ruby 1.9 - Feature #4818][Open] Add method marshalable? On Fri, Jun 3, 2011 at 1:44 PM, Joel VanderWerf wrote: > 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? Or: hash = Hash.new { |h, k| h[k] = k * 2 } class << hash def marshal_dump Hash[*self.to_a] end hash.marshalable? # => true -a -- Austin Ziegler � halostatue@gmail.com � austin@halostatue.ca http://www.halostatue.ca/ � http://twitter.com/halostatue