0

fsm.process_event('eventname'); を呼び出すと、

遷移が発生した場合は true を返し、「no_transition」が呼び出された場合、または例外が発生した場合は false を返す方法はありますか?

ありがとう

4

1 に答える 1

0

これまで誰も答えていないので、非常に謙虚な提案を投稿します。fsm.process_event() を呼び出す前と後に current_state() メソッドを呼び出して、結果を比較してみてください。ただし、これは自己遷移または内部遷移の場合をカバーするものではなく、他の代替手段がある場合に使用するものではありません (せいぜいハックです)。

イベントがどの状態によっても処理されず、ただ伝播するだけの場合をキャッチしようとしている場合は、最下層のスーパーステートをもう 1 つ追加して、そこに到達したイベントを報告することができます (つまり、伝播したすべての状態で無視されます)。

あるイベントが実際に何かを実行したかどうか、いつ実行したかを知る必要がある状況がありました (最初に延期されてから実行された可能性があります)。その場合、MSM が「ACK」メッセージを外部キューに投稿するようにしましたが、これがあなたの問題に当てはまるかどうかはわかりません。

私の謙虚な知識では、割り込みとステート マシンはあまりうまく混ざりません。通常は、単純にそれらを飲み込むか、コンテキストに応じて何らかのイベントに変換しようとします。sates (基礎となる関数オブジェクト) のスローを許可しないでください。

于 2012-09-19T17:59:37.357 に答える