模块化gen_fsm行为实现

时间:2014-03-29 17:15:59

标签: erlang

我有一个gen_fsm实现,它有很多状态和很多代码(超过2000行代码)。任何想法如何使gen_fsm模块化,也许像插件系统?但我希望fsm能够在位于不同插件中的状态之间跳转。

1 个答案:

答案 0 :(得分:1)

你可以创建erlang模块。我正在查看this gen_fsm skeleton,您可以将任何函数换成它自己的模块。

例如假设你有一个像

这样的事件处理程序
 handle_event(wakeup, StateName, State) -> 
                                  %% rest of the body

你可以创建一个新模块并在那里移动handle事件的定义

  -module(wakeup_event).
   -export(wakeup/3).

    wakeup(_wakeup,Statename, State)-> %%do something here
                                       {nextstate, Statename,State}.

并从handle_event中调用它,如此

   handle_event(wakeup,Statename,State)-> 
             wakeup_event:wakeup(wakeup,Statename,State);