- class HashWithDefaults < Hash
- def initialize(*args)
- super(*args) { |_, key| self.defaults[key] }
- end
- def defaults
- @defaults ||= {}
- end
- end
- # Usage:
- hash = HashWithDefaults.new
- p hash[:foo] # => nil
- hash.defaults[:foo] = "foo"
- p hash[:foo] # => "foo"
- hash[:foo] = "FOO"
- p hash[:foo] # => "FOO"