2012-09-25 76 views
3

我想执行一个非常简单的Erlang代码,并且它不工作。 我tryied执行了一些问候世界没有问题,但不是我自己的代码。Erlang - 未定义的函数

-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 
+0

在此处运行良好:'Eshell V5.8.5(以^ G终止) 1> c(服务器)。 {ok,server} 2> server:start()。 true 3>' –

+0

如何在eshell上下载以前的版本? – user1573607

+0

我不认为该版本是问题。我在最新的Erlang(R15B01,Eshell V5.9.1)上获得了相同的结果。你在哪个平台上? –

回答

0

尝试检查与PWD()。无论您是否位于列出的服务器代码所在的目录中。似乎是一个路径问题。在你的代码中也可能会发生这样的情况:get_path()有一个目录,其中的另一个server.beam所在的目录没有启动函数。

2

你用c/1编译你的代码,但你忘了用l/1加载它到VM。虽然虚拟机会自动加载模块新的(模块尚未加载到虚拟机),但每次编译为新的虚拟机时不会重新加载它们。

如果你在开发中做了很多工作,你可能需要研究诸如sync之类的工具。