一种专用数据结构,支持高效的联接操作,并具有定义好的遍历顺序。通常用于从规则和方面中的传递依赖项累积数据。如需了解详情,请点击此处。
依赖项集的元素必须可哈希化且都属于同一类型(由内置 type(x)
函数定义),但依赖项集并非简单的哈希集,也不支持快速成员资格测试。如果您需要常规的集数据类型,请使用核心 Starlark 集类型(从 Bazel 8.1 开始提供);如果您的 .bzl 文件需要与较低版本的 Bazel 兼容,您可以使用字典来模拟集,其中所有键都映射到 True
。
在进行真值测试时(即在布尔上下文中使用,例如 if d:
,其中 d
是 depset),只有当 depset 不为空时,它才为 true;此检查是 O(1) 操作。
依赖项集是不可变的。应使用其构造函数创建它们,并通过 transitive
参数与其他依赖项合并或增强。
order
参数用于确定转换依赖项集为可迭代对象时所执行的遍历类型。有四个可能的值:
-
"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 没有影响,反之亦然。