我只是在阅读国家机器理论。请考虑一下:
event[guard]/action
State A -----------------------------> State B
这是我的问题:如果我定义状态A和B之间的转换,有事件,警卫和动作,就像上面的“图片”一样;并且接收到事件并且保护表达式评估为真,然后:当我的对象处于状态A或B时,将执行动作吗?
换句话说,我是否需要将操作配置为在状态A或B中可执行(假设我只想选择一个可以执行操作的状态)?
Google发现告诉我该操作将在转换的确切时间执行;但我的大脑有接受它的问题:我的对象需要在执行动作时处于某种状态(仅仅因为我的对象需要始终处于某种状态)。并且执行该动作可能需要一段时间。
相关:如果在执行操作期间发生错误,会发生什么。我的对象是否会保持在状态A,或者它是否会转换到状态B(请记住事件已收到并且保护表达式被评估为真)?
使用自定义state machine listener可以很容易地检查它,在其中您可以覆盖用于进入/退出状态和转换的相应方法。
当我的对象处于状态A或B时,是否会执行操作?
您处于状态A时将执行您的操作(正在转换)。发生的顺序如下:
Started transition
State Entered: A
SM changed states from:null to: A
Ended transition
---
Executing guard logic
Started transition
Executing normal action //action is executed before exiting State A
State exited: A
State Entered: B
SM changed states from:A to: B
Ended transition
如果在执行操作期间发生错误,会发生什么。我的物体会保持在状态A,还是会转换到状态B.
你将留在A州。
正如您在上面的输出中所看到的,状态的退出发生在执行操作(成功)之后。如果在此之前发生异常,您仍将处于状态A.