Project

General

Profile

Feature #13122

Special syntax for Hash#default_proc

Added by woodruffw (William Woodruff) over 3 years ago. Updated over 3 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:79046]

Description

The current Hash#default_proc flow usually looks something like this:

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:

MY_HASH = {
  key: "value"
}.freeze

needs to become

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:

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:

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

Also available in: Atom PDF