From: "myxoh (Nicolas Klein)" Date: 2021-08-20T18:42:50+00:00 Subject: [ruby-core:105028] [Ruby master Feature#18124] Hash shorthands (matching constructors functionality in JS) Issue #18124 has been updated by myxoh (Nicolas Klein). 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) ---------------------------------------- Feature #18124: Hash shorthands (matching constructors functionality in JS) https://bugs.ruby-lang.org/issues/18124#change-93436 * 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. -- https://bugs.ruby-lang.org/ Unsubscribe: