Erlang 在gen_statem中自动更改状态
让我们假设我有以下场景: 我在一个状态机中有三个状态,用状态函数编码在Erlang 在gen_statem中自动更改状态,erlang,state-machine,Erlang,State Machine,让我们假设我有以下场景: 我在一个状态机中有三个状态,用状态函数编码在gen_statem中。从状态A到状态B我确实需要一个触发器,但我希望从状态B到状态C我不需要,因为状态B将执行一些代码,然后将机器状态传递到状态C(名为Idle),以等待其他输入。检查以下说明状态机的图片: 有可能这样做吗? 到现在为止,我只能用触发器将状态传递到状态。我从来没有使用过它,但我认为你可以用它来实现这一点 在状态“A”中,当您收到命令时,您可以在回调的返回值中定义下一个状态“B” 以及一个可能是事件的操作,该
gen_statem
中。从状态A到状态B我确实需要一个触发器,但我希望从状态B到状态C我不需要,因为状态B将执行一些代码,然后将机器状态传递到状态C(名为Idle),以等待其他输入。检查以下说明状态机的图片:
有可能这样做吗?
到现在为止,我只能用触发器将状态传递到状态。我从来没有使用过它,但我认为你可以用它来实现这一点 在状态“A”中,当您收到命令时,您可以在回调的返回值中定义下一个状态“B” 以及一个可能是事件的操作,该操作将插入事件队列顶部,以便在您输入“B”时立即触发:
state_A({call,From},command,Data) ->
NewData = do_something(Data),
{next_state,state_B,NewData,[{next_event,cast,go_to_C},{reply,From,done}]}.
然后在状态“B”下,您将立即收到事件go_to_C,您可以通过自己的回拨来处理它:
state_B(cast,go_to_C,Data) ->
NewData = other_stuff(Data),
{next_state,state_C,NewData}.