Issue #13122 has been updated by Nobuyoshi Nakada. What about ```ruby MY_HASH = Hash.new {|h, k| "other value"}.update( key: "value", ).freeze ``` ? ---------------------------------------- Feature #13122: Special syntax for Hash#default_proc https://bugs.ruby-lang.org/issues/13122#change-62455 * Author: William Woodruff * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- The current Hash#default_proc flow usually looks something like this: ~~~ ruby my_hash = { key: "value" } my_hash.default_proc = proc { |h, k| h[k] = "other value" } ~~~ This makes the common practice of freezing large constant hashes unwieldy. For example, this: ~~~ruby MY_HASH = { key: "value" }.freeze ~~~ needs to become ~~~ruby MY_HASH = { key: "value" } MY_HASH.default_proc = proc { |h, k| h[k] = "other value" } MY_HASH.freeze ~~~ if a `default_proc` is used. I propose a new syntax for setting the default_proc within the hash-declaration itself: ~~~ruby my_hash = { key: "value" *: proc { |h, k| h[k] = "other value" } } ~~~ `*:` as a hash-key is currently a syntax error, so I think there's space in the language for this. Of course, this should also support rocket-style: ~~~ruby my_hash = { "key" => "value" * => proc { |h, k| h[k] = "other value" } } ~~~ (I'm completely open to alternative syntaxes, `*` just comes to mind because of wildcarding). I'm happy to attempt work on this, if this feature is desired. I have experience with MRI's API, but not with writing new syntax (which I assume would go in parse.y), so I'd appreciate the help of someone who's familiar with the intricacies of parse.y. Best, William Woodruff -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>