Erlang:如何重用以gen_fsm形式表示的策略?

Din*_*esh 0 erlang

我正在实施robo-soccer,它使用gen_fsm来表示每个机器人的策略.我已经为攻击者制定了策略.现在,我想使用相同的策略来运行多个攻击者,比如5个攻击者.为此,我必须在5个不同的模块中复制相同的gen_fsm代码(200行),总共产生1000行代码.
有没有办法编写gen_fsm并在多个模块中重用它?示例代码段是

-module(planner).
-behaviour(gen_fsm).
 start() -> 
    start_link().
start_link() ->
    gen_fsm:start_link({local, ?SERVER}, ?MODULE, [], []).

init([]) ->
    {ok, state1, ets:new(test,[public])}.

state1({test},State) ->
    case ets:lookup(State,ball) of
[] ->
    action!{turn,80}, 
    {next_state,state1,State};
Data ->
  % some code % %,
  {next_state,state2,State}
end;

state2({test},State) ->

 % --- some code ---%
Run Code Online (Sandbox Code Playgroud)

Ada*_*erg 5

您可能应该在gen_fsm没有全局注册名称的情况下启动该过程.尝试:

start_link() ->
    gen_fsm:start_link(?MODULE, [], []).
Run Code Online (Sandbox Code Playgroud)

请记住使用从中返回的进程ID来跟踪您的进程gen_fsm:start_link/3.