我正在尝试执行一个非常简单的 Erlang 代码,但它不起作用。 我尝试过毫无问题地执行一些 hello worlds,但不是我自己的代码。
-module(server).
%% Exported Functions
-export([start/0, process_requests/1]).
%% API Functions
start() ->
ServerPid = spawn(server, process_requests, [[]]),
register(myserver, ServerPid).
process_requests(Clients) ->
receive
{client_join_req, Name, From} ->
NewClients = [From|Clients], %% TODO: COMPLETE
broadcast(NewClients, {join, Name}),
process_requests(NewClients); %% TODO: COMPLETE
{client_leave_req, Name, From} ->
NewClients = lists:delete(From, Clients), %% TODO: COMPLETE
broadcast(Clients, {leave, Name}), %% TODO: COMPLETE
process_requests(NewClients); %% TODO: COMPLETE
{send, Name, Text} ->
broadcast(Clients, {message, Name, Text}), %% TODO: COMPLETE
process_requests(Clients)
end.
%% Local Functions
broadcast(PeerList, Message) ->
Fun = fun(Peer) -> Peer ! Message end,
lists:map(Fun, PeerList).
编译结果:
5> c(server).
{ok,server}
6> server:start().
** exception error: undefined function server:start/0
最佳答案
您使用c/1
编译代码,但忘记使用l/1
将其加载到VM。虽然VM确实自动加载新模块(尚未加载到VM的模块),但每次编译到新梁时它不会重新加载它们。
如果您在开发中经常这样做,您可能需要研究像 sync 这样的工具。 .
关于function - Erlang - 未定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12585612/