Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 在gen_statem中自动更改状态_Erlang_State Machine - Fatal编程技术网

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}.