hash_methods/resetting_defaults.rb

tests/_examples/hash_methods/resetting_defaults.rb in the metorex repository.

# `initialize` is the hook behind `Hash.new`, and calling it again sets a new
# default without touching the pairs already stored.
held = { "one" => 1 }
p(held.default)

held.send(:initialize, 0)
p([held.default, held["missing"], held.to_a])

held.send(:initialize) { |hash, key| key.to_s * 2 }
p([held.default, held["ab"], held.to_a])

held.send(:initialize)
p([held.default, held.default_proc])

made = Set.new([1, 2, 2, 3])
p([made.size, made.include?(2)])

begin
  Set.new(42)
rescue ArgumentError => refused
  p(refused.message)
end

Output:

nil
[0, 0, [["one", 1]]]
[nil, "abab", [["one", 1]]]
[nil, nil]
[3, true]
"value must be enumerable"