0

当我们调用 fsm.process_event('eventname');

如果发生转换,是否有方法返回 true,如果调用“no_transition”或发生异常,则返回 false?

谢谢

4

1 回答 1

0

鉴于到目前为止没有人回答,我将发布我非常谦虚的建议。您可以尝试在调用 fsm.process_event() 之前和之后调用 current_state() 方法并比较结果。然而,这不会涵盖自我转换或内部转换的情况,如果有其他替代方案(充其量是黑客),我也不会使用它。

如果您试图捕捉事件没有被任何状态处理并且只是通过传播的情况,您可以添加一个底层超状态来报告到达它的事件(即被它们传播的所有状态忽略)。

我遇到过一些情况,我需要知道某个事件是否真的做了某事以及它何时做了(也许它先被推迟然后执行)。在那种情况下,我让我的 MSM 将“ACK”消息发布到外部队列,我不确定这是否适用于您的问题。

以我的拙见,中断和状态机不能很好地混合,我通常要么简单地吞下它们,要么尝试根据上下文将它们变成一些事件。你永远不应该让你的状态(底层函数对象)抛出。

于 2012-09-19T17:59:37.357 回答