介绍
在 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 语法与旧的字符串形式兼容,用户可根据需求选择适合的方式。
管道符
为了在 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 语法,以充分利用其带来的优势。