偏移

一种专用数据结构,支持高效的合并操作,并具有明确的遍历顺序。通常用于在规则和方面中累积传递依赖项中的数据。如需了解详情,请点击此处

depset 的元素必须是可哈希的,并且类型必须相同(由内置 type(x) 函数定义),但 depset 并非简单的哈希 集,也不支持快速成员资格测试。如果您需要通用集数据类型,请使用核心 Starlark 集类型(自 Bazel 8.1 起提供);如果您的 .bzl 文件需要 与旧版 Bazel 兼容,您可以使用字典来模拟集,其中所有键 都映射到 True.

在测试真值时(即在布尔上下文中(例如 if d:,其中 d 是 depset)使用时),当且仅当 depset 为非空时,它才为 True;此检查是 O(1) 操作。

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()

返回 depset 中元素的列表,不包含重复项,并按 depset 的遍历顺序排列。请注意,对于多次添加到 depset 的元素,顺序未指定(但具有确定性)。对于 "default" 排序的 depset,以及子 depset 中顺序与父 depset 不同的元素,顺序也未指定。该列表是副本;修改该列表不会对 depset 产生任何影响,反之亦然。