在项目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).
答案 0 :(得分: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或{ {1}}。当您创建自定义OTP行为时,您必须直接调用start_link
,这样您就不需要复制gen:start
中的错误检查代码。