Project

General

Profile

Feature #8895

Updated by ko1 (Koichi Sasada) over 5 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