Feature #18124
closedHash shorthands (matching constructors functionality in JS)
Description
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:
local_number = 1
user = OStruct.new(name: 'john')
hash = %C{ local_var user }
would be equivalent to:
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
Updated by mame (Yusuke Endoh) about 3 years ago
- Related to Feature #14579: Hash value omission added
Updated by mame (Yusuke Endoh) about 3 years ago
- Related to Feature #17292: Hash Shorthand / Punning added
Updated by mame (Yusuke Endoh) about 3 years ago
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{ }
.
Updated by myxoh (Nicolas Klein) about 3 years ago
- Subject changed from Hash shorthands (matching constructors and destructuring functionality in JS) to Hash shorthands (matching constructors functionality in JS)
- Description updated (diff)
Updated by myxoh (Nicolas Klein) about 3 years ago
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{ }
.
Thank you, haven't had enough of a chance to play with Ruby 3. Clearly I missed things.
I've updated to remove the reference to the destructuring. I've also made a slight update to make it more consistent with ruby's existing % literal constructors (as that's the intent here)
Updated by osyo (manga osyo) about 3 years ago
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
Updated by myxoh (Nicolas Klein) about 3 years ago
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?
Updated by jeremyevans0 (Jeremy Evans) about 3 years ago
- Status changed from Open to Closed