Конечные автоматы¶
Конечный автомат (state machine) — это конечный набор состояний, которые могут детерминированно переходить друг в друга из-за событий.
Конфигурация¶
И конечные автоматы, и диаграммы состояний определяются с помощью фабричной функции createMachine():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
Конфигурация машины такая же, как конфигурация узла состояния, с добавлением свойства контекста:
context— представляет локальное «расширенное состояние» для всех вложенных состояний машины. См. контекст для получения более подробной информации.
Параметры¶
Реализации для действий, активностей, задержек, защитных функций и служб могут быть указаны в конфигурации машины в виде строки, а затем указаны как объект во втором аргументе createMachine():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
У этого объекта есть 5 необязательных свойств:
actions— сопоставление действий с их реализациейactivities— сопоставление активностей с их реализациейdelays— сопоставление задержек с их реализациейguards— сопоставление охранников переходов с их реализациейservices— сопоставление служб с их реализацией
Расширение автомата¶
Существующие автоматы могут быть расширены с помощью метода .withConfig(), который принимает ту же структуру объекта, что и выше:
1 2 3 4 5 6 7 8 9 | |
Начальный контекст¶
Как показано в первом примере, контекст определяется непосредственно в самой конфигурации. Если вы хотите расширить существующую машину с другим начальным контекстом, вы можете использовать .withContext() и передать свой context:
1 2 3 4 5 6 | |
Внимание
Это не приведет к слиянию с исходным контекстом, а заменит исходный контекст контекстом, предоставленным для .withContext(...). Вы все еще можете «объединить» контексты вручную, указав machine.context:
1 2 3 4 5 | |