当前位置: 首页 > article >正文

3.3.3 VO-O语法- 语法算子(二)

循环遍历

由于VO语言是面向数据集的,其所有隐含的语义中都已经带有了遍历并计算的数据逻辑。因此,VO语言只提供了一种支持循环语法的算子--Loop算子。

Loop算子

Loop算子是一个容器算子,其可以实现对其内部子流程的循环迭代运行。但Loop算子有一个强使用限定,就是其必须有前置算子向其传输数据流。

Loop算子驱动内嵌流程迭代执行。迭代次数可由“迭代次数”参数进行设置。若迭代次数设置为小于1的参数,那么内嵌流程必须有逻辑结束迭代操作。此时,内嵌流程必须有数据分支连接了退出端口。Loop算子会对该逻辑进行检查。

上图表示了一个迭代复制数据集的逻辑。每次循环都会复制一个数据集,并将数据集通过数据输出端口输出。也可以编写逻辑只在迭代结束后输出数据,这时候就需要内嵌流程不是去连接数据输出端口了,而是去连接退出端口了。Loop算子的退出端口一旦接受到数据集就会退出迭代,所以需要控制好何时向退出端口写出数据。若即连接了退出端口又设置了迭代次数,那么哪个条件先满足,就用哪个条件退出迭代。

使用Loop算子有一个特别需要注意的事项就是,内嵌流程必须与输入端口与迭代输出端口有连接。进入Loop算子的每个数据集都会激活一次迭代计算。首次迭代时,内嵌流程收到的数据集来自前置算子,迭代过程中再次收到的数据则来自内嵌流程的上一迭代的输出了。这样,内嵌流程就可以实现对同一数据集的多次迭代计算了。

异常

目前,绝大多数通用语言都支持这种语法特性,用于简化容错处理,确保未知运行错误可被捕获并恢复运行环境或进入错误处置。VO 语言也对该特性进行了支持,方便开发者编写复杂的数据流程。

异常捕获

异常捕获算子(ExceptionReporter)是一个容器算子。从其内部看,是一个可以容纳内嵌流程的标准容器算子。可以编写任意逻辑的流程。但是当流程发生错误,产生异常时,其不会立刻将异常抛回给VO语言解释器,由解释器结束这个数据流程;而是捕获异常,并将异常通过exceptionOut端口报出。可以在exceptionOut端口后加入异常信息处理逻辑,比如向Kafka同步异常状态等。

异常捕获算子有一个“是否异常退出”的控制参数,若该值为true。那么当异常发生且异常信息被成功写出到exceptionOut端口后,异常捕获算子会通知VO语言解释器终止整个流程的运行;若该值为false,那么数据流程会继续执行。流程执行的恢复点因算子功能差异会不同,可能会有以下几种情况:

  • 算子忽略掉当前产生异常的数据,继续执行

  • 算子忽略掉当前产生异常的数据集,继续执行

  • 算子无法恢复执行,继续产生异常。

抛异常

在开发过程中,如果数据出现某个特征即认为不合理并需要退出整个流程时,可以使用抛异常算子。抛异常算子支持设置异常码和异常信息,用于记录数据的业务逻辑问题。异常信息支持以上下文变量的方式即@{varName},将输入端口输入的数据拼装进异常信息中。上下文变量的名字必须是输入数据集的列名,且只会将数据集的第一条信息作为代表拼装入异常信息。抛异常算子经常会与异常捕获算子搭配使用。


http://www.kler.cn/a/545384.html

相关文章:

  • 【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
  • three.js 通用 shaderToy着色器使用,切换
  • 2.7 静态方法/构造函数Mock
  • Java面向对象二:三大特性
  • python后端调用Deep Seek API
  • Pyqt6 中 QMediaPlayer 音视频播放
  • vs发布后再linux打包linux版本的安装包
  • BIO、NIO 和 AIO 这三者的区别?
  • 磁盘与mysql的故事
  • 【机器学习】监督学习-决策树-CART(Classification and Regression Tree,分类与回归树)详尽版
  • 安卓手游内存call综合工具/内部call/安卓注入call/数据分析(类人猿学院)
  • MySQL | MySQL安装教程
  • Redis过期删除与内存淘汰策略面试题剖析
  • 前端快速生成接口方法
  • 网络安全知识--网络、网络安全产品及密码产品概述
  • 网络安全抑制 缓解 根除 恢复 网络安全如何解决
  • 麒麟操作系统-MySQL5.7.36二进制安装
  • 原生Three.js 和 Cesium.js 案例 。 智慧城市 数字孪生常用功能列表
  • 用 Python 实现 DeepSeek R1 本地化部署
  • 【无标题】前端面试题AI版