5

我正在尝试执行一个非常简单的 Erlang 代码,但它不起作用。我已经尝试执行了一些没有问题的 hello world,但不是我自己的代码。

-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
4

2 回答 2

2

您使用 编译代码c/1,但忘记使用l/1. 虽然 VM 确实会自动加载模块(尚未加载到 VM 的模块),但它不会在每次编译到新梁时重新加载它们。

如果您在开发中经常这样做,您可能需要研究诸如sync之类的工具。

于 2014-11-22T02:14:52.083 回答
1

尝试使用 pwd() 检查。您是否在列出的服务器代码所在的目录中。似乎是路径问题。也可能发生在您的代码中:get_path() 有一个目录,另一个 server.beam 所在的目录没有启动功能。

于 2014-11-22T01:05:02.440 回答