[我目前正在阅读LYAE
,我试图理解为什么gen_fsm
状态方法必须根据source完全返回任何内容
{reply, Reply, NextStateName, NewStateData}
{reply, Reply, NextStateName, NewStateData, Timeout}
{reply, Reply, NextStateName, NewStateData, hibernate}
{next_state, NextStateName, NewStateData}
{next_state, NextStateName, NewStateData, Timeout}
{next_state, NextStateName, NewStateData, hibernate}
{stop, Reason, Reply, NewStateData}
{stop, Reason, NewStateData}
有人可以向我解释一下,如果我有3种状态方法:a
,b
和c
,并且状态机的定义如下:
a()->
receive
something -> b();
_ -> error(err)
end.
b()->
receive
somethingelse-> c();
_ ->
end.
为什么我需要下一个状态方法的返回结果?
someMethod()->
receive
_ ->
{next_state, NextStateName, NewStateData}=someNextMethod(),
//why would i place code here? What could i possibly do with the above tuple ?
end.
我不明白为什么我要把代码AFTER转到下一个状态方法?所有调用都是递归的,所以除了初始状态(我可以在fsm结束或抛出之后实际上可以执行某些操作)之外,为什么还要在其他状态下放置代码?