Erlang - 未定义的函数 [英] Erlang - undefined function

查看:242
本文介绍了Erlang - 未定义的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图执行一个非常简单的Erlang代码,并且它不工作。
我tryied执行了一些hello worlds没有问题,但不是我自己的代码。

  -module(server) 。 
%%导出函数
-export([start / 0,process_requests / 1])。
%% API函数
start() - >
ServerPid = spawn(server,process_requests,[[]]),
寄存器(myserver,ServerPid)。
process_requests(客户) - >
收到
{client_join_req,姓名,发件人} - >
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} - >
广播(客户端,{消息,名称,文本}),%% TODO:COMPLETE
process_requests(客户端)
结束。
%%本地函数
广播(PeerList,Message) - >
Fun = fun(Peer) - >同辈!消息结束时,
列出:map(Fun,PeerList)。

编译结果:

  5个C(服务器)。 
{ok,server}
6>服务器:start()方法。
**异常错误:undefined function server:start / 0


解决方案你用 c / 1 编译你的代码,但是你忘记了用 l / 1 。虽然VM会自动加载模块 new (模块尚未加载到VM),但每次编译为新的时候都不会重新加载它们。

如果你在开发中做了很多工作,你可能需要研究诸如同步


I'm trying to execute a very simple Erlang code, and it's not working. I've tryied executed some hello worlds without problem, but not mine own code.

-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). 

Compile result:

5> c(server).
    {ok,server}
6> server:start().       
** exception error: undefined function server:start/0

解决方案

You compile you code with c/1, but you forgot to load it to VM with l/1. While VM does loads modules new automatically (modules not yet loaded to VM), it doesn't reload them each time you compile to new beam.

If you do it a lot in development you might want to look into tools like sync.

这篇关于Erlang - 未定义的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆