[ruby-core:105030] [Ruby master Feature#18124] Hash shorthands (matching constructors functionality in JS)
From:
"myxoh (Nicolas Klein)" <noreply@...>
Date:
2021-08-20 18:52:05 UTC
List:
ruby-core #105030
Issue #18124 has been updated by myxoh (Nicolas Klein).
osyo (manga osyo) wrote in #note-7:
> mame (Yusuke Endoh) wrote in #note-3:
> > For "Destructuring", you can use one-line pattern matching since Ruby 3.0:
> >
> > ```
> > hash = {a: 'a', b: 'b'}
> > hash => { a:, b: }
> > p hash[:a] #=> "a"
> > ```
> >
> > For "Constructor", it is a long-running topic: #14579, #17292, and maybe other tickets I cannot remember. But as far as I recall, no one proposed this particular syntax `%C{ }`.
>
> I think it's similar to this.
> https://bugs.ruby-lang.org/issues/14973
Yes, fair find! If google translate is translating correctly it seems the exact same specification.
Sorry, should have done a better job searching for it!
Should I close this issue then?
----------------------------------------
Feature #18124: Hash shorthands (matching constructors functionality in JS)
https://bugs.ruby-lang.org/issues/18124#change-93439
* Author: myxoh (Nicolas Klein)
* Status: Open
* Priority: Normal
----------------------------------------
# **Suggestion:**
To implement one shorthand operators that allows you to construct hash into local variables and construct local variables into a hash.
# **Context:**
Javascript and other languages have a similar feature. It's helpful, and I don't think there's anything stopping Ruby for supporting it.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
Ruby also supports destructuring from an array.
# **Syntax:**
### Constructor:
The constructor shorthand would allow you to create a hash where the symbol key has the same name as the variable.
For example:
```ruby
local_number = 1
user = OStruct.new(name: 'john')
hash = %C{ local_var user }
```
would be equivalent to:
```ruby
local_number = 1
user = OStruct.new(name: 'john')
hash = { local_number: local_number, user: user }
```
The new syntax is based on ruby's existing literal constructors syntax.
EDIT:
Edited to remove a reference to the destructuring, which is already implemented on Ruby 3
--
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>