查阅发现fsm几年前已经被statem代替了,但对于erlang的behavior还不是太熟悉,还是要多练,今天看到一个简单易懂的例子,拿过来解析一下。
回忆一下fsm的定义
Erlang风格的有限状态机
gen_fsm(Finite State Machines),有限状态机,是一种抽象模型,由有限数量的状态和事件构成,当程序处于各个状态时,它可以从环境中接收一些特定的事件——并且只接收这些事件。而fsm处于特定状态时,程序会执行一些与当前状态对应的预先决定好的动作,使得当前状态转化为另一个新的状态,然后fsm以此新状态等待下一个新的事件。
状态机主要是状态的改变,比如在A状态下如果发生了B事件,并且执行动作C会把状态调整到AA
State(A) | Event(B) >>>> Action© >>>>State(AA)
示例
在手册里看到一个好理解的开锁例子,比如有一把锁,显然有两个状态——锁着或者打开的状态,现在每个人可以在锁住的时候,按密码,如果密码正确则开锁30s,如果不正确,则回到初始状态(锁着)
因为只有两个状态,所以也不用放图了,只要想着有两个状态,事件就是按密码,然后外部调用按密码的函数,超时自动关门等