一种专用数据结构,支持高效的合并操作,并具有定义的遍历顺序。通常用于在规则和方面中累积传递依赖项中的数据。如需了解详情,请参阅此处。
depset 的元素必须是可哈希的,并且类型必须相同(由内置的 type(x) 函数定义),但 depset 并非简单的哈希集,也不支持快速成员资格测试。如果您需要通用的 set 数据类型,可以使用字典进行模拟,其中所有键都映射到 True。
Depset 是不可变的。应使用其 构造函数 创建 depset,并通过 transitive 实参与其他 depset 合并或扩充。
order 形参决定了将 depset 转换为可迭代对象时执行的遍历类型。有以下四种可能的值:
"default"(以前为"stable"):顺序未指定(但具有确定性)。"postorder"(以前为"compile"):从左到右的后排序。具体来说,这会以最左优先的方式递归遍历所有子项,然后以最左优先的方式遍历直接元素。"preorder"(以前为"naive_link"):从左到右的预排序。具体来说,这会以最左优先的方式遍历直接元素,然后以最左优先的方式递归遍历子项。"topological"(以前为"link"):从根到叶的拓扑排序。不保证从左到右的顺序。
只有当两个 depset 具有相同的顺序,或者其中一个 depset 具有 "default" 顺序时,才能合并这两个 depset。在后一种情况下,生成的 depset 的顺序将与另一个 depset 的顺序相同。
Depset 可能包含重复值,但在迭代时(使用 to_list())会抑制这些重复值。重复值可能会干扰排序语义。
成员
to_list
list depset.to_list()
"default"-排序的 depset,以及子 depset 中与父 depset 的顺序不同的元素,顺序也未指定。该列表是副本;修改该列表不会对 depset 产生任何影响,反之亦然。