Я сейчас читаю LYAE
и пытаюсь понять, почему gen_fsm
методы состояния должны вообще что-либо возвращать в соответствии с источником
{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 метода состояния: a
, b
и c
, и конечный автомат будет определен следующим образом:
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.
Я не понимаю, зачем мне ставить код ПОСЛЕ вызова метода следующего состояния? Все вызовы являются рекурсивными, поэтому кроме начального состояния, когда я мог бы что-то сделать после того, как fsm закончился или бросил, зачем мне помещать код в другие состояния?