Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Marshal ruby hash with default proc - remove the default proc?

I've got a Hash with a default proc that I'd like to Marshal to a file, but the default proc prevents me from doing that.

Rather than writing my own _dump and _load methods, is it possible instead to remove the default proc instead? At the point where I'm Marshalling I'm never going to need the default proc again.

like image 985
Stewart Johnson Avatar asked Sep 29 '10 03:09

Stewart Johnson


1 Answers

Just reset the default:

h.default = nil

More explicitly:

def dumpable_hash(h)
  return h unless h.default_proc
  copy = h.clone  
  copy.default = nil # clear the default_proc
  copy
end

In Ruby 2.0, you can also write h.default_proc = nil if you prefer. Available for all Rubies with require 'backports/2.0.0/hash/default_proc'.

like image 157
Marc-André Lafortune Avatar answered Nov 07 '22 05:11

Marc-André Lafortune