Feature #4818
open
Added by yimutang (Joey Zhou) over 13 years ago.
Updated almost 7 years ago.
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?"
- Status changed from Open to Assigned
- Assignee set to matz (Yukihiro Matsumoto)
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
- Target version set to 2.6
- Target version deleted (
2.6)
- Has duplicate Feature #16240: Are all objects and methods marshalable added
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0