2011-04-14 4 views
0

나는 erlang 프로그램에서 작동하고 이상한 런타임 오류가 발생합니다. 왜 그런가? 감사!Erlang 런타임 오류

오류는 (프로그램을 성공적으로 컴파일 한 후)입니다

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

이 프로그램입니다 :

변수 PID 아마 이전 라인에서 뭔가하지만 <0.65.0>로 설정되어
-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. 

답변

7

당신 셸에 입력 된 :

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

Th 실제로 오류를 생성하는 라인을

8> <0.42.0> = <0.65.0>. 

"일치하지 않음"오류가 발생하게합니다. 문제의

더 확실한 그림 : 당신은 아마 쉘은 쉘이 을 잊지 가지고 바로 PID 변수, 또는 f()을 잊지 가지고 f(PID)를 실행하려면 : 문제를 해결하기로

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

ALL 개의 변수.

+1

이전 의견에서 혼란 스러울 경우 사과드립니다. 나는 답변을하는 과정에서 자신의 질문을 편집했다. –

+0

좋은 답변입니다! 예, 저는 잠시 동안 쉘을 사용하고 있었고 PID가 이미 다른 것으로 설정되어 있다는 사실을 잊었습니다. 하 - 불변 변수. :) –

+0

응답에 erlang의 변수를 추가 할 수 없습니다. 변수는 한 번만 값으로 할당 할 수 있습니다. 이것은 언어의 아름다움 중 하나입니다 :) – Arunmu