为什么gen_fsm状态方法必须返回某些内容?

问题描述 投票:1回答:1

[我目前正在阅读LYAE,我试图理解为什么gen_fsm状态方法必须根据source完全返回任何内容

{reply, Reply, NextStateName, NewStateData}
{reply, Reply, NextStateName, NewStateData, Timeout}
{reply, Reply, NextStateName, NewStateData, hibernate}

{next_state, NextStateName, NewStateData}
{next_state, NextStateName, NewStateData, Timeout}
{next_state, NextStateName, NewStateData, hibernate}

{stop, Reason, Reply, NewStateData}
{stop, Reason, NewStateData}

有人可以向我解释一下,如果我有3种状态方法:abc,并且状态机的定义如下:

a()->
  receive
    something -> b();
    _ -> error(err)
  end.

b()->
  receive 
    somethingelse-> c();
    _ ->
  end.

为什么我需要下一个状态方法的返回结果?

someMethod()->
   receive 
      _ -> 
           {next_state, NextStateName, NewStateData}=someNextMethod(),
          //why would i place code here? What could i possibly do with the above tuple ?
   end.

我不明白为什么我要把代码AFTER转到下一个状态方法?所有调用都是递归的,所以除了初始状态(我可以在fsm结束或抛出之后实际上可以执行某些操作)之外,为什么还要在其他状态下放置代码?

erlang fsm
1个回答
0
投票
重点是您的示例是一个模块状态机,而当您使用gen_fsm行为时,至少有两个模块在运行:
© www.soinside.com 2019 - 2024. All rights reserved.