【问题标题】:Change state automatically in gen_statem在 gen_statem 中自动更改状态
【发布时间】:2021-04-19 14:54:43
【问题描述】:

假设我有以下场景: 我在带有 state_functions 的gen_statem 编码的状态机中有三个状态。从状态 A 到 BI 确实需要触发器,但我希望从状态 B 到 CI 不需要,因为状态 B 将执行一些代码,然后将机器状态传递给状态 C(名为 Idle),以等待其他输入.检查下图说明状态机:

可以这样做吗? 到目前为止,我只能通过触发器将状态传递给状态。

【问题讨论】:

    标签: erlang state-machine


    【解决方案1】:

    我从未使用过它,但我认为您可以通过action 实现这一目标。

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

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 2021-11-26
      • 2017-09-16
      • 1970-01-01
      • 2021-01-19
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多