[erlang-questions] pattern matching with records in a function

Pablo Vieytes <>
Tue Apr 10 16:25:49 CEST 2012


thanks,
now it works.


>>Although I'm not quite sure what you want to achieve...

I didn't write all code I needed.

I needed something like this:


-record(inputmsg, {action, data1, ..., datan}).

handle_cast(#inputmsg{action=a}=Msg, State) ->
     action_a(Msg),
    {noreply, State};


handle_cast(#inputmsg{action=b}=Msg, State) ->
     action_b(Msg),
    {noreply, State};

handle_cast(#inputmsg{}=Msg, State) ->
     action_default(Msg),
    {noreply, State};



and I needed data1...datan in action_x().


thanks.

2012/4/10 Robert Virding <>

> As Attila has said the way to do this:
>
> handle_cast(#inputmsg{}=Msg, State) ->
>     ... ;
>
> The reason your example doesn't work is that #inputmsg{_='_'} expands so
> that all the fields will get the value of the ATOM '_' which is definitely
> not the same as the VARIABLE _. In this case there is actually no need to
> do anything as the compiler automatically puts the variable _ for all
> fields which aren't explicitly mentioned.
>
> The main use of the _='_' construct is when you want to create a match
> pattern for ets/mnesia which is tuple which is INTEPRETED as a pattern.
> Then it is useful to have a construct which sets all unmentioned fields to
> the value of the atom '_' which is interpreted as the don't care variable.
>
> It is irrelevant whether you write #inputmsg{}=Msg or Msg=#inputmsg{},
> they are equivalent. I prefer the former, but many prefer the latter.
>
> Robert
>
> ------------------------------
>
> Hi,
> I'm trying to use records in functions pattern matching but I'm not
> able. I want something like that:
>
> handle_cast(Msg = #inputmsg{_='_'}, State) ->
>    do_something(Msg),
>     {noreply, State};
>
> Any idea?
> thanks.
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120410/a8fc9639/attachment.html>


More information about the erlang-questions mailing list