2012-02-24 114 views
3

在项目gproc的文件gen_leader.erl中,创建了自定义行为。但是在下面的语句中,模块“gen”是什么?我在“erlang文档工具http://www.erlang.org/erldoc”中找不到这个模块?你能给我一些解释吗?什么是gen:开始意思?

behaviour_info(callbacks) -> 
    [{init,1}, 
    {elected,2}, 
    {surrendered,3}, 
    {handle_leader_call,4}, 
    {handle_leader_cast,3}, 
    {handle_local_only, 4}, 
    {from_leader,3}, 
    {handle_call,3}, 
    {handle_cast,2}, 
    {handle_DOWN,3}, 
    {handle_info,2}, 
    {terminate,2}, 
    {code_change,4}]; 
behaviour_info(_Other) -> 
    undefined. 

start_link(Name, [_|_] = CandidateNodes, Workers, 
     Mod, Arg, Options) when is_atom(Name) -> 
    gen:start(?MODULE, link, {local,Name}, Mod, %<<++++++ What's the meaning? 
      {CandidateNodes, Workers, Arg}, Options). 

回答

9

看起来gen:start()指的是gen.erl。根据文件中的文档,gen.erl实现了gen_server,gen_fsm和其他OTP行为的通用部分。在这种情况下,它看起来像gen_start处理产生新的进程。它会检查一个进程是否已经产生了给定的名字。如果有,则返回错误。如果没有,则通过调用模块的startstart_link函数产生新过程。

换句话说,当你调用gen_server:startgen_fsm:start,它调用gen:start(它基本的完整性检查),创:开始,依次调用模块的启动或start_link。当您创建自定义的OTP行为时,您必须直接拨打gen:start,以便您不需要复制gen.erl中的错误检查代码。

+0

非常感谢。 – 2012-02-24 03:50:43