Project

General

Profile

Feature #18124

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


 

Back