2012-02-24 6 views
3

プロジェクトgprocのファイルgen_leader.erlでは、カスタマイズされた動作が作成されます。しかし、次のステートメントでは、モジュール "gen"とは何ですか?このモジュールは "erlang document tools 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が新しいプロセスを生成するように見えます。プロセスが指定された名前で既に生成されているかどうかを確認します。存在する場合、エラーが返されます。そうでなければ、モジュールのstartまたはstart_link関数を呼び出すことによって、新しいプロセスが生成されます。言い換えれば

、あなたがgen_server:startgen_fsm:startを呼び出すとき、それは(基本的な妥当性がどのをチェックしない)gen:startを呼び出し、GEN:スタートは、順番に、モジュールの開始やstart_linkを呼び出します。カスタムOTPビヘイビアを作成するときは、gen:startを直接呼び出す必要があります。そのため、エラーチェックコードをgen.erlに複製する必要はありません。

+0

ありがとうございました。 –

関連する問題