#scala #akka #fsm
#scala #akka #fsm
Вопрос:
Я сомневаюсь, выполняется ли код в блоке «onTransition» (akka FSM) после достижения нового состояния? или до достижения нового состояния.
В статьях и книге, которые я прочитал, упоминается слово «во время»… что (для меня) предполагает «до достижения нового состояния».
Действительно ли это имеет значение?
Я думаю, да… Я имею в виду, что переход в новое состояние подразумевает (в большинстве случаев) изменение данных состояния. Обычно мы меняем эти данные состояния в обработчике событий (в блоке «when-case-event»).
Но что, если новое состояние зависит от результата вычислений / действий, выполняемых в блоке «onTransition»? В этом случае нам нужно будет переместить этот блок в блок «когда-случай-событие».
Итак, мне сейчас непонятно …: есть ли какое-либо правило / руководство: какие действия должны входить в «когда-случай-событие», и какие действия должны входить в «onTransition»?
дополнение: я надеюсь, что в следующую редакцию документа Akka будут включены какие-либо разъяснения / рекомендации по этой теме.
Заранее спасибо, Рака
Ответ №1:
В onTransition
старом состоянии данные доступны через stateData
, а данные нового состояния доступны как nextStateData
. Новое состояние не может быть изменено onTransition
, но вы можете отправить сообщение self
.
Комментарии:
1. В какое состояние передается сообщение
self
? Старый или новый?