2011-05-24 56 views
1

我已經二郎的gen_fsm,我的第一個狀態:二郎的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注意在外殼

如何正確轉換到新的狀態?

+0

通話後有在該代碼(缺少逗號錯誤到'io:format/1')。這是複製過程中的錯誤還是您的代碼沒有編譯? – 2011-05-24 08:12:15

+0

是的,我編輯在stackoverflow,代碼好吧。 – 0xAX 2011-05-24 08:17:25

回答

4

首先,確保開始是您的FSM的實際初始狀態

{ok, begin, State} 

開始是你的初始狀態:您可以通過返回,在初始化功能,像指定FSM的初始狀態。

此外,請注意,您正在定義一個Module:StateName/3函數,在您的FSM上執行gen_fsm:sync_send_event任何時候都會調用該函數。如果您嘗試使用gen_fsm:send_event將事件發送到FSM,則應該定義一個函數Module:StateName/2,它是它的異步版本。

最後,嘗試通過tracing調試您的模塊,而不是添加打印輸出。這非常簡單,它可以避免您一次又一次地重新編譯代碼。

更多信息avilable here