Feature #4818
openAdd method marshalable?
Description
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?"
If you think the method name hard to spell, maybe get a synonym "dumpable?"
Updated by naruse (Yui NARUSE) over 13 years ago
- Status changed from Open to Assigned
- Assignee set to matz (Yukihiro Matsumoto)
Updated by austin (Austin Ziegler) over 13 years ago
On Fri, Jun 3, 2011 at 1:44 PM, Joel VanderWerf
<joelvanderwerf / gmail.com> 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
end
hash.marshalable? # => true
Updated by mame (Yusuke Endoh) about 12 years ago
- Target version set to 2.6
Updated by mame (Yusuke Endoh) about 5 years ago
- Has duplicate Feature #16240: Are all objects and methods marshalable added