Когда именно выполняются коды перехода? — Akka, FSM

#scala #akka #fsm

#scala #akka #fsm

Вопрос:

Я сомневаюсь, выполняется ли код в блоке «onTransition» (akka FSM) после достижения нового состояния? или до достижения нового состояния.

В статьях и книге, которые я прочитал, упоминается слово «во время»… что (для меня) предполагает «до достижения нового состояния».

Действительно ли это имеет значение?

Я думаю, да… Я имею в виду, что переход в новое состояние подразумевает (в большинстве случаев) изменение данных состояния. Обычно мы меняем эти данные состояния в обработчике событий (в блоке «when-case-event»).

Но что, если новое состояние зависит от результата вычислений / действий, выполняемых в блоке «onTransition»? В этом случае нам нужно будет переместить этот блок в блок «когда-случай-событие».

Итак, мне сейчас непонятно …: есть ли какое-либо правило / руководство: какие действия должны входить в «когда-случай-событие», и какие действия должны входить в «onTransition»?

дополнение: я надеюсь, что в следующую редакцию документа Akka будут включены какие-либо разъяснения / рекомендации по этой теме.

Заранее спасибо, Рака

Ответ №1:

В onTransition старом состоянии данные доступны через stateData , а данные нового состояния доступны как nextStateData . Новое состояние не может быть изменено onTransition , но вы можете отправить сообщение self .

Комментарии:

1. В какое состояние передается сообщение self ? Старый или новый?