Эрланг: Как повторно использовать стратегию, представленную в виде gen_fsm? - PullRequest
0 голосов
/ 27 июня 2011

Я использую robo-soccer, который использует gen_fsm для представления стратегии каждого робота. Я разработал стратегию для атакующего. Теперь я хочу использовать одну и ту же стратегию для запуска нескольких атакующих, скажем, 5 атакующих. Для этого мне нужно скопировать один и тот же код gen_fsm (200 строк) в 5 разных модулях, в результате чего получается всего 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 ]

5 голосов
/ 27 июня 2011

Вероятно, вам следует запустить процесс gen_fsm без зарегистрированного в мире имени. Попробуйте:

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

Не забудьте отслеживать ваши процессы, используя идентификатор процесса, полученный из gen_fsm:start_link/3.

0 голосов
/ 27 июня 2011

Почему бы просто не вызвать 5 процессов, по 1 для каждого злоумышленника, который запускает один и тот же код?

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