Adds Javascript-style destructuring to Elixir. When working with a map
, instead
of writing match operation like this:
def full_name(%{first_name: first_name, last_name: last_name}) do
"#{first_name} #{last_name}"
end
You can write:
import Destructure
def full_name(d%{first_name, last_name}) do
"#{first_name} #{last_name}"
end
It also works with structs
and keyword
.
import Destructure
def full_name(d%Person{first_name, last_name}) do
"#{first_name} #{last_name}"
end
def full_name(d[first_name, last_name]) do
"#{first_name} #{last_name}"
end
You can also do it in a case statement.
case post(url, data) do
{:ok, d%{body}} -> # instead of {:ok, %{body: body}}
# use body variable
_other ->
# ...
end
Unlike Javascript, you can still bind custom variables:
d(%{first, last, email: mail}) = %{...}
See the Hex Documentation for more details.
Add destructure
to your list of dependencies in mix.exs
:
def deps do
[{:destructure, "~> 0.2.3"}]
end