Feature #18124
Updated by myxoh (Nicolas Klein) over 3 years ago
# **Suggestion:** To implement one two shorthand operators that allows you to construct destructure 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:** ### ## Destructuring: ```ruby hash = {a: 'a', b: 'b'} %D{ a, b } = hash ``` Would be equivalent to: ```ruby hash = {a: 'a', b: 'b'} a, b = hash[:a], hash[:b] ``` Hence ```ruby a == 'a' => true b = 'b' => true ``` It could also support the ** destructuring syntax ```ruby hash = {a: 'a', b: 'b', c: 'c', d: 'd', e: 'e'} %D{ a, b, **others } = hash ``` Would be equivalent to: ```ruby hash = {a: 'a', b: 'b', c: 'c', d: 'd', e: 'e'} a, b, others = hash[:a], hash[:b], hash.except(:a, :b) ``` Hence ```ruby a == 'a' => true b = 'b' => true others = { c: 'c', d: 'd', e: 'e' } => true ``` ## 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 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.