0
이것은 얼랭으로 들어가는 첫 번째 시간이지만, 나는 프롤로그의 세계에서 왔습니다.얼랭 (Erlang) 정의되지 않은 함수 전역
모듈을로드하고 함수를 실행한다고 말하면 왜 다른 별도의 함수로 실행되는 것 같지 않은 것 같습니다.
질문 : Erlang - undefined function과 관련되어 보이지만 내 경우에는 적용되지 않는 것처럼 보입니다. 모듈을 컴파일하고로드 할 수 있습니다. 여기
내 Eshell 출력입니다 :-module(chat_client).
-compile(export_all).
register_nickname(Nickname) ->
Pid = spawn(chat_client, handle_messages, [Nickname]),
message_router:register_nick(Nickname, Pid).
unregister_nickname(Nickname) ->
message_router:unregister_nick(Nickname).
send_message(Addressee, MessageBody) ->
message_router:send_chat_message(Addressee, MessageBody).
handle_messages(Nickname) ->
receive
{ printmsg, MessageBody } ->
io:format("~p received: ~p~n", [Nickname, MessageBody]),
handle_messages(Nickname);
stop ->
ok
end.
start_router() ->
message_router:start().
관련 파일 message_router.erl I에서 : chat_client.erl 파일에서
Erlang/OTP 20 [erts-9.1] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10]
Eshell V9.1 (abort with ^G)
1> m(chat_client).
Module: chat_client
MD5: 32e278745489222df841e93620154031
Compiled: No compile time info available
Object file: h:/Program Files/erl9.1/bin/chat_client.beam
Compiler options: []
Exports:
handle_messages/1
module_info/0
module_info/1
register_nickname/1
send_message/2
start_router/0
unregister_nickname/1
ok
2> chat_client:start_router().
yes
3> chat_client:register_nickname(myatom).
** exception error: undefined function global:send_message/2
4> l(chat_client).
{module,chat_client}
5> chat_client:start_router().
ok
6> chat_client:register_nickname(myatom).
** exception error: undefined function global:send_message/2
7> l(message_router).
{module,message_router}
8> chat_client:start_router().
ok
9> chat_client:register_nickname(myatom).
** exception error: undefined function global:send_message/2
10>
, send_message/2
에 일치가 없다 전역 함수가 일치하는 것을 볼 수 있습니다 (또는 내가 생각하기에) :
send_chat_message(Addressee, MessageBody) ->
global:send_message(?SERVER, { send_chat_msg, Addressee, MessageBody }).
register_nick(ClientName, ClientPid) ->
global:send_message(?SERVER, { register_nick, ClientName, ClientPid }).
unregister_nick(ClientName) ->
global:send_message(?SERVER, { unregister_nick, ClientName }).
이 경우 내가 뭘 잘못하고 있니?