Project

General

Profile

Feature #8895

Updated by ko1 (Koichi Sasada) over 10 years ago

 =begin 
 Given Ruby already supports destructuring assignment with Array (a, b = [1, 2]), I propose destructuring assignments for Hash. 

 == Basic example 
 ------------- 

 ```ruby 
   

   params = {name: "John Smith", age: 42} 
   {name: name, age: age} = params 

   # name == "John Smith" 
   # age == 42 
 ``` 

 This would replace a common pattern of assigning hash values to local variables to work with. 

 == General syntax 
 -------------- 

 ```ruby 
   

   { <key-expr> => <variable_name>, … } = <object that responds to #[]> 

   # Symbols 
   { foo: bar } = { foo: "bar" } 
   bar == "bar" 

   # Potential shorthand 
   { foo } = { foo: "bar" } 
   foo == "bar" 
 ``` 

 == Use cases 
 --------- 

 ```ruby 
   cases: 

   # MatchData 
   { username: username, age: age } = "user:jsmith age:42".match(/user:(?<username>\w+) age:(?<age>\d+)/) 
   username == "jsmith" 
   age == "42" 
 ``` 

 == Edge cases 
 ---------- 

 ```ruby 
   

   # Variable being assigned to more than once should use the last one 
   { foo: var, bar: var } = {foo: 1, bar: 2} 
   var == 2 
 ``` 

 Thoughts? 

 
 =end 

Back