开发者

Erlang runtime error

I'm working on an erlang program and getting a strange runtime error. Any idea why? Thanks!

The errors are (after compiling the program successfully):

   8> PID = spawn(planner,start,[]).
   ** exception error: no match of right hand side value <0.65.0>
   9> 

This is the program:

-module(planner).
-export([start/0]).

start() ->
    loop([],[]).

loop(ContactsList,EventsList) ->
receive

    {contact, Last, First, Number} ->
        loop([{L开发者_运维问答ast,First,Number}|ContactsList],EventsList);

    {event, Date, Time, What} -> 
        loop([{Date,Time,What}|ContactsList],EventsList);

    print_contacts ->
        NewList=lists:sort(ContactsList),
        lists:foreach(fun(Elem)->io:format("~p~n", [Elem]) end, NewList),
        loop(ContactsList,EventsList);

    print_events ->
        NewList=lists:sort(EventsList),
        lists:foreach(fun(Elem)->io:format("~p~n", [Elem]) end, NewList),
        loop(ContactsList,EventsList);

    exit ->
        io:format("Exiting.~n");

    _ -> 
        io:format("Dude, I don't even know what you're talking about.~n"),
        loop(ContactsList,EventsList)
end.


The variable PID is probably set to something else but <0.65.0> from an earlier line you entered in the shell:

5> PID = spawn(...).
<0.42.0>
8> PID = spawn(...).
** exception error: no match of right hand side value <0.65.0>

This effectively makes the line which generates the error something like

8> <0.42.0> = <0.65.0>.

which will result in a "no match" error.

More obvious illustration of the issue:

1> X = 1.
1
2> X = 2.
** exception error: no match of right hand side value 2

As to solving your issue: You probably want to run f(PID) to have the shell forget just the PID variable, or even f() to have the shell forget ALL variables.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜