fsm.process_event('eventname'); を呼び出すと、
遷移が発生した場合は true を返し、「no_transition」が呼び出された場合、または例外が発生した場合は false を返す方法はありますか?
ありがとう
fsm.process_event('eventname'); を呼び出すと、
遷移が発生した場合は true を返し、「no_transition」が呼び出された場合、または例外が発生した場合は false を返す方法はありますか?
ありがとう
これまで誰も答えていないので、非常に謙虚な提案を投稿します。fsm.process_event() を呼び出す前と後に current_state() メソッドを呼び出して、結果を比較してみてください。ただし、これは自己遷移または内部遷移の場合をカバーするものではなく、他の代替手段がある場合に使用するものではありません (せいぜいハックです)。
イベントがどの状態によっても処理されず、ただ伝播するだけの場合をキャッチしようとしている場合は、最下層のスーパーステートをもう 1 つ追加して、そこに到達したイベントを報告することができます (つまり、伝播したすべての状態で無視されます)。
あるイベントが実際に何かを実行したかどうか、いつ実行したかを知る必要がある状況がありました (最初に延期されてから実行された可能性があります)。その場合、MSM が「ACK」メッセージを外部キューに投稿するようにしましたが、これがあなたの問題に当てはまるかどうかはわかりません。
私の謙虚な知識では、割り込みとステート マシンはあまりうまく混ざりません。通常は、単純にそれらを飲み込むか、コンテキストに応じて何らかのイベントに変換しようとします。sates (基礎となる関数オブジェクト) のスローを許可しないでください。