状态流支持的状态和转换操作类型

news2024/9/27 17:37:17

状态操作类型

States 可以有不同的操作类型,包含了entry, during, exit, bind, and, on event_name 操作。状态的操作使用以下通用格式的标签表示法分配给操作类型:
name/
entry:进入操作
during:在操作期间
exit:退出操作
bind:数据名, 事件名
on event_name:在事件名操作
下图中显示了不同的状态操作类型。

在这里插入图片描述
在状态标签中输入名称后,输入回车并指定状态的操作。在标签中输入动作类型的顺序无关紧要。如果未显式指定语句的操作类型,则图表会将该语句视为entry操作。

状态操作缩写描述
entryen当状态变为激活态时执行
exitex当状态处于激活状态并且发生状态转换时执行
duringdu当状态处于活动状态并且发生特定事件时执行
bind绑定事件或数据对象,以便只有该状态及其子级才能广播事件或更改数据值
on event_name当状态处于活动状态并接收到event_name广播时执行
on after(n, event_name)当状态处于活动状态并且接收到n个event_name广播后执行
on before(n, event_name)当状态处于活动状态且在接收到n个event_name广播之前执行
on at(n, event_name)当状态处于活动状态并且正好接收到n个event_name广播时执行
on every(n, event_name)当状态处于活动状态并且每n次接收到event_name广播时执行

Entry 操作

Entry 操作前面是前缀Entry,简称en,后面是必需的冒号(:),后面是一个或多个操作。用回车符、分号(;)或逗号(,)分隔多个操作。如果输入名称和斜杠,然后直接跟着操作,则这些操作将被解释为输入操作。如果仅指定条目操作,则此简写非常有用。

状态的输入操作在进入状态(变为活动状态)时执行。在前面的示例中,当默认转换进入状态A时,将执行入口操作id=x+y。

退出操作

退出操作前面是前缀Exit或ex,简称Exit,后面是必需的冒号(:),后面是一个或多个操作。用回车符、分号(;)或逗号(,)分隔多个操作。

当状态处于活动状态并发生状态转换时,将执行状态的退出操作。

During Actions

During操作前面是前缀During或du,后面是必需的冒号(:),后面是一个或多个操作。用回车符、分号(;)或逗号(,)分隔多个操作。

在一个状态的操作过程中,当该状态处于活动状态且发生事件且无法有效转换到另一个状态时执行。

Bind Actions

绑定操作前面是前缀Bind,后面是必需的冒号(:),后面是一个或多个事件或数据。使用回车符、分号(;)或逗号(,)分隔多个数据/事件。

绑定操作将指定的数据和事件绑定到一个状态。绑定到某个状态的数据可以通过该状态或其子级的操作进行更改。其他状态及其子状态可以自由读取绑定的数据,但不能更改。绑定到某个状态的事件只能由该状态或其子状态广播。其他状态及其子状态可以自由收听绑定的活动,但不能发送。

绑定操作应用于图表,无论绑定状态是否处于活动状态。在前面的State Action Types示例中,状态A的绑定操作bind:id,time_out将数据id和事件time_out绑定到状态A。此绑定可防止图表中的任何其他状态(或其子状态)更改id或广播事件time_oout。

如果另一个状态包括更改数据的操作或广播绑定到另一个状态的事件,则会发生解析错误。以下示例显示了其中一些错误情况:

在这里插入图片描述

状态动作分析错误的原因
bind: id in state B只有一个状态可以更改绑定到状态A的数据id
entry: time_out in state C只有一个状态可以广播绑定到状态A的事件time_out

将函数调用事件绑定到状态也会绑定它所调用的函数调用子系统。在这种情况下,函数调用子系统在进入绑定状态时启用,在退出绑定状态时禁用。

On Event_Name Actions

在event_name上,操作前面是前缀On,后面是唯一的事件event_name,后面是一个或多个操作。用回车符、分号(;)或逗号(,)分隔多个操作。您可以为多个事件指定操作,方法是在不同事件的event_name行上添加其他操作。如果希望不同的事件触发不同的操作,请在状态标签中输入多个on event_name操作语句,每个语句指定特定事件或一组事件的操作,例如:
on ev1: action1();
on ev2: action2();

转换操作类型
在“状态操作类型”中,可以看到如何将操作附加到状态的标签。也可以将动作附加到变换标签上的变换。转换可以有不同的操作类型,包括事件触发器、条件、条件操作和转换操作。动作类型遵循以下通用格式的标签符号:

event_trigger[condition]{condition_action}/transition_action
以下示例显示了典型的转换标签语法:
在这里插入图片描述

TransitionEvent TriggerConditionCondition ActionTransition Action
状态 A 到 状态 Cevent1temp>50func1()
状态A 到 状态Bevent2data1=5

Event Triggers

在转换标签语法中,事件触发器首先显示为事件的名称。它们没有区别的特殊特性,无法将它们与转换标签中的其他动作区分开来。在转换操作类型的示例中,从状态A的两个转换都有事件触发器。从状态A到状态B的转换具有事件触发事件2,并且从状态A转换到状态C具有事件触发器事件1。

事件触发器指定导致进行转换的事件,前提是条件(如果指定)为true。指定事件是可选的。没有事件表示在发生任何事件时进行转换。使用OR逻辑运算符(|)指定多个事件。

Conditions

在转换标签语法中,条件是用方括号([])括起来的布尔表达式。在“转换操作类型”中的示例中,从状态A到状态C的转换具有条件temp>50。

条件是一个布尔表达式,用于指定在指定表达式为true的情况下发生转换。遵循以下条件定义和使用指南:

条件表达式必须是计算结果为true(1)或false(0)的布尔表达式。

条件表达式可以由以下任意一个组成:

在数据和数值之间进行比较的布尔运算符

返回布尔值的函数

当指定为参数的状态处于活动状态时,in(state_name)条件的计算结果为true

注意:图表不能使用in条件来触发基于其他图表中状态活动的操作。

条件表达式可以调用图形函数、真值表函数或返回数值的MATLAB®函数。

例如,[test_function(x,y)<0]是一个有效的条件表达式。

注意:如果条件表达式调用具有多个返回值的函数,则仅应用第一个值。不使用其他返回值。

条件表达式不应调用导致图表更改状态或修改任何变量的函数。

对于具有AND关系的表达式,可以使用&for;对于具有OR关系的表达式可以使用|对布尔表达式进行分组。

赋值语句不是有效的条件表达式。

一元递增和递减操作不是有效的条件表达式。

Condition Actions

在转换标签语法中,条件操作遵循转换条件,并用大括号({})括起来。在“转换操作类型”中的示例中,从状态A到状态C的转换具有条件操作func1(),这是一个函数调用。

条件操作在条件评估为true后立即执行,但在转换目标被确定为有效之前执行。如果未指定任何条件,则隐含条件的计算结果为true,并执行条件操作。

注意:只有当事件触发器(如果有)处于活动状态时,才会检查条件。

Transition Actions

在转换标签语法中,转换操作前面有一个正斜杠(/)。在“转换操作类型”中的示例中,从状态A到状态B的转换具有转换操作data1=5。

只有在采用完整的转换路径后,才会执行转换操作。它们在转换目标被确定为有效并且条件(如果指定)为true之后执行。如果转换由多个段组成,则只有在确定到最终目的地的整个转换路径有效后,才执行转换操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1429652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用wda框架实现IOS自动化测试详解

目录 1、weditor元素定位工具 1.1、weditor的安装和使用 2、wda iOS自动化框架 2.1、wda概述 2.2、wda安装 2.3、wda的使用 2.3.1、全局配置 2.3.2、创建客户端 2.3.3、APP相关操作 1、启动APP 2、关闭APP 3、获取APP状态信息 4、获取当前APP的运行信息 2.3.4、设…

Java自救手册

目录 访问地址 访问地址&#xff0c;发现不通&#xff0c;无法访问&#xff1a; 网络不通一般有两种情况&#xff1a; Maven 拿Maven 拿到Maven以后 Maven单独的报红 Git git注意&#xff1a; 目录 访问地址 访问地址&#xff0c;发现不通&#xff0c;无法访问&…

Python中with管理上下文

上下文管理器 上下文管理器本质就是能够支持with操作。 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器&#xff0c;上下文管理器对象可以使用 with 关键字。显然&#xff0c;文件&#xff08;file&#xff09;对象也实现了上下文管理器协议。 实现…

Canal 结合 SpringBoot 源码梳理

1、canal是什么&#xff0c;可以用来作什么 canal是阿里开源的一个用于监听数据库binlog&#xff0c;从而实现数据同步的工具。 2、安装 我使用的是1.1.5版本&#xff0c;太高的版本需要的jdk版本和mysql的驱动版本会更高&#xff0c;可以根据自己的环境选择。 如果是自己玩的话…

24.云原生之ArgoCD钩子

云原生专栏大纲 文章目录 Argo CD钩子如何定义钩子钩子删除策略 Argo CD钩子 Argo CD 是一个用于部署和管理 Kubernetes 应用程序的工具&#xff0c;它提供了一种声明式的方式来定义和自动化应用程序的部署过程。Argo CD 钩子&#xff08;Hooks&#xff09;是一种机制&#x…

MySQL-- if()函数 简单明了

if 主要有&#xff1a;IF函数嵌套和IF聚合函数 两类&#xff0c;主要是用来根据条件返回不同值。 基本语法为; IF(条件表达式,值1,值2)如果条件表达式为True&#xff0c;返回值1&#xff0c;为False,返回值2.返回值可以是任何值&#xff0c;比如&#xff1a;数值&#xff0c;…

消息中间件之RocketMQ源码分析(五)

消费进度保存机制 消费者启动时会同时启动位点管理器&#xff0c;RocketMQ设计了远程位点管理和本地位点管理 两种位点管理方式. 集群消费时&#xff0c;位点由客户端提交给Broker保存. 广播消费时&#xff0c;位点保存在消费者本地磁盘上 OffsetStore接口核心方法 void load(…

重写Sylar基于协程的服务器(4、协程调度模块的设计)

重写Sylar基于协程的服务器&#xff08;4、协程调度模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日…

智慧文旅:驱动文化与旅游融合发展的新动力

随着科技的快速发展和人们生活水平的提高&#xff0c;文化和旅游的融合成为了时代发展的必然趋势。智慧文旅作为这一趋势的引领者&#xff0c;通过先进的信息技术手段&#xff0c;推动文化与旅游的深度融合&#xff0c;为产业的发展注入新的活力。本文将深入探讨智慧文旅如何成…

被人疯狂吐槽的预制菜,居然是资本看重的“万亿级”市场?

被人疯狂吐槽的预制菜&#xff0c;居然是资本看重的“万亿级”市场&#xff1f; 文丨微三云营销总监胡佳东&#xff0c;点击上方“关注”&#xff0c;为你分享市场商业模式电商干货。 - 大家是不是以为只有被天天吐槽难吃的外卖和小饭店&#xff0c;才会用预制菜&#xff0c;…

【LeetCode】17. 电话号码的字母组合(中等)——代码随想录算法训练营Day25

题目链接&#xff1a;17. 电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff…

基于springboot校园二手书交易管理系统源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括乐校园二手书交易管理系统的网络应用&#xff0c;在外国二手书交易管理系统已经是很普遍的方式&#xff0c;不过国内的管理系统可能还处于起步阶段。乐校园二手书交易管理系统…

dubbo+sentinel最简集成实例

说明 在集成seata后&#xff0c;下面来集成sentinel进行服务链路追踪管理&#xff5e; 背景 sample-front网关服务已配置好 集成 一、启动sentinel.jar 1、官网下载 选择1:在本地启动 nohup java -Dserver.port8082 -Dcsp.sentinel.dashboard.serverlocalhost:8082 -Dp…

【C语言】数组的应用:扫雷游戏(包含扩展和标记功能)附完整源代码

这个代码还是比较长的&#xff0c;为了增加可读性&#xff0c;我们还是把他的功能分装到了test.c&#xff0c;game.c&#xff0c;game.h里面。 扫雷游戏的规则相信大家来阅读本文之前已经知晓了&#xff0c;如果点到雷就输了&#xff0c;如果不是雷&#xff0c;点到的格子会显…

Kotlin快速入门系列8

Kotlin的泛型 与Java一样&#xff0c;Kotlin也提供泛型。泛型&#xff0c;即 "参数化类型"&#xff0c;将类型参数化&#xff0c;可以用在类&#xff0c;接口&#xff0c;方法上。可以为类型安全提供保证&#xff0c;消除类型强转的烦恼。声明泛型类的格式如下&…

关于反爬虫的的概述

目录 前言 一、验证码验证 二、IP限制 三、User-Agent限制 四、动态页面加载 总结 前言 反爬虫是一种防止网站被自动程序&#xff08;爬虫&#xff09;访问和抓取数据的技术手段。在网络爬虫的发展和使用过程中&#xff0c;有一部分爬虫是用于非法获取网站数据、侵犯隐私…

重写Sylar基于协程的服务器(5、IO协程调度模块的设计)

重写Sylar基于协程的服务器&#xff08;5、IO协程调度模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、…

【C/C++ 10】扫雷小游戏

一、题目 写一个扫雷小游戏&#xff0c;每次输入一个坐标&#xff0c;若该处是地雷&#xff0c;则游戏失败&#xff0c;若该处不是地雷&#xff0c;则显示周围地雷数量&#xff0c;若扫除全部非地雷区域&#xff0c;则扫雷成功。 二、算法 设置两张地图&#xff08;二维数组&…

校园墙表白墙系统uniapp微信小程序

配置文件 (自动编号、配置参数名称、配置参数值)&#xff1b; 前端开发:vue 语言&#xff1a;javapythonnodejsphp均支持 运行软件:idea/eclipse/vscode/pycharm/wamp均支持 框架支持:Ssm/django/flask/thinkphp/springboot/springcloud均支持 数据库 mysql 数据库工具&#x…

洛谷P1002 过河卒(简单DP)

[NOIP2002 普及组] 过河卒 题目描述 棋盘上 A A A 点有一个过河卒&#xff0c;需要走到目标 B B B 点。卒行走的规则&#xff1a;可以向下、或者向右。同时在棋盘上 C C C 点有一个对方的马&#xff0c;该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为…