Issue #8895 has been updated by Sean Linsley. This is what I'm imagining: ~~~ a, b, *c, d:, e:, f: 'f', **g = [1, 2, 3, {d: 4, e: 5}] a == 1 b == 2 c == [3] d == 4 e == 5 f == 'f' g == {} ~~~ Where an error would be thrown if the hash didn't have the given key, and no default was provided. ---------------------------------------- Feature #8895: Destructuring Assignment for Hash https://bugs.ruby-lang.org/issues/8895#change-46247 * Author: Jack Chen * Status: Open * Priority: Normal * Assignee: * Category: * Target version: ---------------------------------------- =begin Given Ruby already supports destructuring assignment with Array (a, b = [1, 2]), I propose destructuring assignments for Hash. == Basic example 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 { <key-expr> => <variable_name>, กฤ } = <object that responds to #[]> # Symbols { foo: bar } = { foo: "bar" } bar == "bar" # Potential shorthand { foo } = { foo: "bar" } foo == "bar" == Use cases: # MatchData { username: username, age: age } = "user:jsmith age:42".match(/user:(?<username>\w+) age:(?<age>\d+)/) username == "jsmith" age == "42" == Edge cases # Variable being assigned to more than once should use the last one { foo: var, bar: var } = {foo: 1, bar: 2} var == 2 Thoughts? =end -- https://bugs.ruby-lang.org/