Project

General

Profile

Actions

Feature #18124

closed

Hash shorthands (matching constructors functionality in JS)

Added by myxoh (Nicolas Klein) 2 months ago. Updated 10 days ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:<unknown>]

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


Related issues

Related to Ruby master - Feature #14579: Hash value omissionClosedmatz (Yukihiro Matsumoto)Actions
Related to Ruby master - Feature #17292: Hash Shorthand / PunningClosedActions
Actions #1

Updated by mame (Yusuke Endoh) 2 months ago

Actions #2

Updated by mame (Yusuke Endoh) 2 months ago

Updated by mame (Yusuke Endoh) 2 months 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{ }.

Actions #4

Updated by myxoh (Nicolas Klein) 2 months ago

  • Description updated (diff)
  • Subject changed from Hash shorthands (matching constructors and destructuring functionality in JS) to Hash shorthands (matching constructors functionality in JS)

Updated by myxoh (Nicolas Klein) 2 months 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)

Actions #6

Updated by myxoh (Nicolas Klein) 2 months ago

  • Description updated (diff)

Updated by osyo (manga osyo) 2 months 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) 2 months 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?

Actions #9

Updated by jeremyevans0 (Jeremy Evans) 10 days ago

  • Status changed from Open to Closed
Actions

Also available in: Atom PDF