我正在实施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)
您可能应该在gen_fsm没有全局注册名称的情况下启动该过程.尝试:
start_link() ->
gen_fsm:start_link(?MODULE, [], []).
Run Code Online (Sandbox Code Playgroud)
请记住使用从中返回的进程ID来跟踪您的进程gen_fsm:start_link/3.