【问题标题】:Erlang gen_fsm transition to a new stateErlang gen_fsm 转换到新状态
【发布时间】:2011-08-31 17:37:50
【问题描述】:

我有 erlang gen_fsm,我的第一个状态:

begin({Nick}, _From, State) ->
            {reply, true, next_state, State}.

然后我有:

next_state(_Event, _From, State) -> 
        io:format("Test \n"),
        {reply, ok, begin, State}.

但我没有在 shell 中看到 Test 注释

如何正确过渡到新状态?

【问题讨论】:

  • 该代码中存在错误(调用io:format/1 后缺少逗号)。这是复制时的错误还是您的代码没有编译?
  • 是的,我在stackoverflow中编辑,在代码中没问题。

标签: erlang fsm


【解决方案1】:

首先,确保 begin 是您的 FSM 的实际初始状态。您可以通过在 init 函数中返回类似以下内容来指定 FSM 的初始状态:

{ok, begin, State}

begin 是你的初始状态。

另外,请注意,您正在定义一个 Module:StateName/3 函数,该函数将在您的 FSM 上执行 gen_fsm:sync_send_event 时调用。如果您尝试使用 gen_fsm:send_event 向 FSM 发送事件,则应改为定义函数 Module:StateName/2,这是它的异步版本。

最后,尝试通过tracing 调试您的模块,而不是添加打印输出。它更简单,并且可以避免您一次又一次地重新编译代码。

更多信息可通过here获得。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2011-03-31
    • 2012-03-22
    • 2021-08-12
    • 2011-05-14
    • 2015-05-24
    • 1970-01-01
    • 2014-05-17
    • 2023-03-27
    • 2015-05-12
    相关资源
    最近更新 更多