Feature #17006
openLet `Kernel#Hash` take a block to provide the default value
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:
A more sophisticated way is this:
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:
Updated by sawa (Tsuyoshi Sawada) about 6 years ago
- Description updated (diff)
Updated by nobu (Nobuyoshi Nakada) about 6 years ago
The description mentions the default value first, but the proposal will solve the default proc only.
Updated by sawa (Tsuyoshi Sawada) about 6 years ago
nobu (Nobuyoshi Nakada) wrote in #note-2:
The description mentions the default value first, but the proposal will solve the default proc only.
Default value is a special (static) case of default proc, so I think having the latter would be enough:
If there is concern for efficiency, at least for strings, we can turn on the frozen string mode.