From: "myxoh (Nicolas Klein)" Date: 2021-08-20T18:52:05+00:00 Subject: [ruby-core:105030] [Ruby master Feature#18124] Hash shorthands (matching constructors functionality in JS) 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: