在项目gproc的文件gen_leader.erl中,创建了自定义行为.但在下面的陈述中,什么是模块"gen"?我在"erlang文档工具http://www.erlang.org/erldoc "中找不到这个模块?你能给我一些解释吗?
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).
Run Code Online (Sandbox Code Playgroud)
qua*_*cle 10
它看起来像是gen:start()指gen.erl.根据文件中的文档,gen.erl实现gen_server,gen_fsm和其他OTP行为的通用部分.在这种情况下,看起来gen_start处理产生新进程.它会检查是否已使用给定名称生成进程.如果有,则返回错误.如果没有,则通过调用模块start或start_link函数生成新进程.
换句话说,当你打电话gen_server:start或gen_fsm:start打电话时gen:start(它进行基本的健全性检查)和gen:start,反过来调用模块的开始或start_link.当您创建自定义OTP行为时,您必须gen:start直接调用,以便您不需要复制错误检查代码gen.erl.