假设我有以下场景:我在状态机中有三个状态,用gen_statem编码,带有state_functions。从状态A到B,我需要一个触发器,但从状态B到C,我不需要,因为状态B将执行一些代码,然后将机器状态传递到状态C(名为Idle),等待其他输入。请查看下图,该图说明了状态机:
gen_statem
有没有可能做到这一点?到现在为止,我只能用触发器将状态传递到状态。
0ve6wy6x1#
我从来没有用过,但我认为你可以通过行动来实现这一点。在状态“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}.
1条答案
按热度按时间0ve6wy6x1#
我从来没有用过,但我认为你可以通过行动来实现这一点。
在状态“A”中,当您接收到命令时,您可以在回调的返回值中定义下一个状态“B”和一个操作,该操作可能是将插入到事件队列顶部的事件,以便在您输入“B”时立即触发:
然后,在状态'B'中,您将立即收到go_to_C事件,并且您可以使用它自己的回调来处理它: