YAML 语法增强

介绍

在 AzureFlow 中,近期对 YAML 语法的增强极大地提升了配置的可读性和灵活性。本文将详细介绍这些新特性,包括 YAML 格式的数据定义和管道符的使用方法。​

一、背景:从字符串形式到 YAML 原生结构

在早期版本的 AzureFlow 中,用户需要以 JavaScript 字符串的形式定义数据。例如:​

data:
  attributes: '[
    {name: "物理攻击", value: random.int(1, 100)},
    {name: "法术攻击", value: random.int(1, 100)},
    {name: "暴击率", value: random.int(1, 100)}
  ]'

这种方式虽然灵活,但在复杂数据结构和嵌套场景下,易读性和维护性较差。​

二、YAML 原生数据结构支持

现在,AzureFlow 支持直接使用 YAML 原生语法定义数据结构,无需将其包装为字符串。​

data:
  attributes:
    - name: "物理攻击"
      value: random.int(1, 100)
    - name: "法术攻击"
      value: random.int(1, 100)
    - name: "暴击率"
      value: random.int(1, 100)

这种方式利用 YAML 的缩进和列表表示,提升了配置的清晰度和可维护性。

管道符

为了在 YAML 中实现类似 JavaScript 的链式数据处理,AzureFlow 引入了管道符的语法扩展。

在下述示例中,attributes | sample(5) 表示从定义的属性列表中随机抽取 5 个元素。

data:
  attributes | sample(5):
    - name: "物理攻击"
      value: random.int(1, 100)
    - name: "法术攻击"
      value: random.int(1, 100)
    - name: "暴击率"
      value: random.int(1, 100)
    - name: "生命值"
      value: random.int(1, 100)
    - name: "护甲"
      value: random.int(1, 100)
    - name: "魔抗"
      value: random.int(1, 100)

管道符支持多重链式调用,实现更复杂的数据处理逻辑。

data:
  attributes | filter(attr => attr.value > 50) | sort_by('value', 'desc') | sample(3):
    - name: "物理攻击"
      value: random.int(1, 100)
    - name: "法术攻击"
      value: random.int(1, 100)
    - name: "暴击率"
      value: random.int(1, 100)
    - name: "生命值"
      value: random.int(1, 100)
    - name: "护甲"
      value: random.int(1, 100)
    - name: "魔抗"
      value: random.int(1, 100)

上述配置将属性列表中值大于 50 的元素进行降序排序后,随机抽取 3 个元素。

AzureFlow 对 YAML 语法的增强,使得配置文件更具可读性和可维护性。

通过支持原生 YAML 数据结构和引入管道符的链式数据处理,可以更高效地定义和管理复杂的数据配置。

建议在实际项目中逐步采用新的 YAML 语法,以充分利用其带来的优势。

Last updated