Erlang Runtime Ошибка - PullRequest
       6

Erlang Runtime Ошибка

0 голосов
/ 14 апреля 2011

Я работаю над программой erlang и получаю странную ошибку во время выполнения.Есть идеи почему?Спасибо!

Ошибки (после успешной компиляции программы):

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

Это программа:

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

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

loop(ContactsList,EventsList) ->
receive

    {contact, Last, First, Number} ->
        loop([{Last,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.

1 Ответ

7 голосов
/ 14 апреля 2011

Переменная PID, вероятно, установлена ​​на что-то другое, но <0.65.0> из более ранней строки, введенной вами в оболочке:

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

Это делает строку, генерирующую ошибку, примерно такой же как

8> <0.42.0> = <0.65.0>.

, что приведет к ошибке «нет совпадения».

Более наглядная иллюстрация проблемы:

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

Что касается решения вашей проблемы: вы, вероятно, хотитезапустите f(PID), чтобы оболочка забыла только переменную PID, или даже f(), чтобы оболочка забыла ALL переменные.

...