Depset

报告问题 查看源代码

一种支持高效合并操作且具有已定义的遍历顺序的专用数据结构。通常用于在规则和方面累积来自传递依赖项的数据。如需了解详情,请参阅此处

Depset 的元素必须是可哈希的,并且它们的类型必须完全相同(如内置类型 (x) 函数所定义),但 Depset 不仅仅是哈希集,不支持快速成员资格测试。如果您需要通用数据集数据类型,可以使用字典(其中的所有键都映射到 True)来模拟数据类型。

偏移量是不可变的。它们应使用其构造函数创建,并通过 transitive 参数合并或扩充。

order 参数决定了将偏移量转换为可迭代对象的遍历类型。有四个可能的值:

  • "default"(以前称为 "stable"):顺序未指定(但具有确定性)。
  • "postorder"(以前称为 "compile"):从左到右排序。确切地说,这是以递归方式遍历所有子项最左边的,然后遍历直接元素最左边的。
  • "preorder"(以前称为 "naive_link"):从左到右预订。确切地说,这会遍历最左边的直接元素,然后以递归方式遍历最左边的子元素。
  • "topological"(以前称为 "link"):从根到叶的拓扑排序。无法保证从左到右。

只有当两个依赖项具有相同的顺序或其中一个具有 "default" 顺序时,才能合并两个 Depset。在后一种情况下,生成的 Depse 顺序将与另一订单的顺序相同。

偏移量可能包含重复值,但在迭代(使用 to_list())时,这些值将被抑制。重复值可能会干扰排序语义。

会员

收件人列表

list depset.to_list()

按照偏移量的遍历顺序返回没有重复元素的列表。请注意,对于在偏移量中多次添加的元素,顺序未指定(但具有确定性)。此外,对于具有 "default" 顺序的依赖项以及顺序不同于父依赖项的子依赖项的元素,未指定其顺序。该列表是副本;修改列表对偏移量没有任何影响,反之亦然。