Actions
Feature #17006
openLet `Kernel#Hash` take a block to provide the default value
Status:
Open
Assignee:
-
Target version:
-
Description
Sometimes, we need to create a hash that has explicit key-value pairs as well as a default value, but there has not been a way to do that at once. The most naive way is to do like this:
h = {a: 1, b: 2}
h.default_proc = ->(h, k){raise "Unknown key #{k}"}
h # => ...
A more sophisticated way is this:
Hash.new{|h, k| raise "Unknown key #{k}"}.merge({a: 1, b: 2})
But that is still not short enough, and it also looks backwards, i.e., we usually want to specify the explicit key-value pairs before the default value.
My proposal is to allow Kernel#Hash
to take a block that provides the default value in the same way as the block of Hash.new
:
Hash({a: 1, b: 2}){|h, k| raise "Unknown key #{k}"}
Actions
Like0
Like0Like0Like0