Что такое Gen: начать смысл? - PullRequest
4 голосов
/ 24 февраля 2012

В файле проекта gproc gen_leader.erl customized создается настроенное поведение. Но в следующем утверждении, что такое модуль "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).

1 Ответ

10 голосов
/ 24 февраля 2012

Похоже, 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...