[erlang-questions] pattern matching with maps in function heads

Alex Shneyderman <>
Thu Oct 29 17:21:34 CET 2015


Attr might have multiple values.

io:format("b: ~p~n", maps:get(b, M)),
io:format("d: ~p~n", maps:get(d, M)).

is probably what you want.

It is discussed briefly in LYSE book:

"You also cannot do matching of a key by value (#{X := val} = Map)
because there could be multiple keys with the same value."

Cheers,
Alex.

On Thu, Oct 29, 2015 at 11:33 AM, Martin Koroudjiev
<> wrote:
> Hello,
>
> How can I do pattern matching with maps in function heads? I tried
>
> -module(m1).
>
> -export([main/0]).
>
> main() ->
>     M = #{a => 1, b => 2, c => 3},
>     io:format("b: ~p~n", get_attr(b, M)),
>     io:format("d: ~p~n", get_attr(d, M)).
>
> get_attr(Attr, #{Attr := Val} = Map) ->
>     Val;
> get_attr(_Attr, _M) ->
>     not_found.
>
> but I get compile error: m1.erl:10: variable 'Attr' is unbound
>
> Thanks in advance,
> Martin
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions


More information about the erlang-questions mailing list