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

时间:2011-06-27 11:11:24

标签: erlang

我正在实施使用 gen_fsm 来表示每个机器人的策略的robo-soccer。 我已经为攻击者制定了策略。现在,我想使用相同的策略来运行多个攻击者,比如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 ---%

2 个答案:

答案 0 :(得分:5)

您应该在没有全局注册名称的情况下启动gen_fsm进程。尝试:

start_link() ->
    gen_fsm:start_link(?MODULE, [], []).

请记住使用gen_fsm:start_link/3返回的流程ID跟踪您的流程。

答案 1 :(得分:0)

为什么不为每个攻击者生成5个进程,运行相同的代码?