[erlang-questions] Fw: Newbie question

Alpar Juttner <>
Tue Jul 21 18:59:14 CEST 2009


Hi, 
> queue ! {put, "ABC"}.
> queue ! {put, "DEF"}.
> queue ! {put, "GHI"}.
> queue ! {get, self()}.
> receive
> {data, Data} -> io:format("Got ~s~n", [Data]);
> empty -> io:format("Got empty~n");
> AnyMessage -> io:format("Trap ~s~n", [AnyMessage]);
> _ -> io:format("Got something else~n")
> after 5000 -> io:format("timed out~n")
> end.
> 
> And I get "Got ABC".  I do another get and the same receive as above and I
> get:
> 
> ** exception exit: {badarg,[{io,format,[<0.31.0>,"Trap
> ~s~n",[{data,"DEF"}]]},
>                             {erl_eval,do_apply,5},
>                             {shell,exprs,6},
>                             {shell,eval_exprs,6},
>                             {shell,eval_loop,3}]}
>      in function  io:o_request/3
> 
> 
> I don't understand why the {data, Data} pattern isn't receiving the
> message.  Can someone help me understand this?

It is because Data is already bound to "ABC", so you try to match
against {data, "ABC"}.

Regards,
Alpar




More information about the erlang-questions mailing list