Маршал рубиновый хэш с proc по умолчанию - удалить proc по умолчанию - PullRequest
11 голосов
/ 29 сентября 2010

У меня есть Hash с процедурой по умолчанию, которую я хотел бы добавить в файл Marshal, но процедура по умолчанию не позволяет мне сделать это.

Вместо того, чтобы писать свои собственные методы _dump и _load, можно ли вместо этого удалить процедуру по умолчанию? В тот момент, когда я делаю маршаллинг, мне больше никогда не понадобится процедура по умолчанию.

Ответы [ 2 ]

14 голосов
/ 29 сентября 2010

Просто сбросьте настройки по умолчанию:

h.default = nil

Более подробно:

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

В Ruby 2.0 вы можете также написать h.default_proc = nil, если хотите. Доступно для всех Рубинов с require 'backports/2.0.0/hash/default_proc'.

5 голосов
/ 08 января 2012

Если вы хотите иметь копию без значений по умолчанию, самый простой способ -

Hash[hash_with_defaults]
...