Dies ist mein erstes Mal Tauchen in Erlang, aber ich komme aus der Welt von Prolog.Erlang Undefined Funktion Global
Ich kann nicht zu verstehen scheinen, warum nach dem Laden des Moduls, und sagen, es eine Funktion auszuführen, scheint es zu einer anderen separaten Funktion zu laufen.
Die Frage Erlang - undefined function scheint verwandt, aber sieht nicht so aus, als ob es in meinem Fall gilt. Ich kann die Module kompilieren und laden.
Hier ist meine Eshell Ausgabe:
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>
Im chat_client.erl Datei, gibt es keine Übereinstimmung zu send_message/2
:
-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().
Aus dem Stand der Datei message_router.erl I kann eine globale Funktion sehen eine Übereinstimmung (oder so denke ich):
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 }).
Was mache ich in diesem Fall falsch?