1

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

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

如何正确过渡到新状态?

4

2 回答 2

4

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

{ok, begin, State}

从哪里开始是您的初始状态。

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

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

更多信息可在此处获得。

于 2011-05-24T09:15:15.417 回答
2

你可以在这里找到一些例子:

http://spawnlink.com/articles/an-introduction-to-gen_fsm-erlybanks-atm/index.html

和这里:

http://pdincau.wordpress.com/2010/09/07/an-introduction-to-gen_fsm-behaviour/

希望能帮助到你

于 2011-05-24T09:16:09.787 回答