Depset

這是一種專門的資料結構,可支援有效率的合併作業,並具有定義的遍歷順序。通常用於從規則和構面中的遞移依附元件累積資料。詳情請參閱這篇文章

depsset 的元素必須可雜湊處理,且類型都相同 (如內建 type(x) 函式所定義),但 depsset 並非單純的雜湊集,也不支援快速成員資格測試。如需一般集合資料型別,請使用核心 Starlark 集合型別 (適用於 Bazel 8.1 以上版本);如果 .bzl 檔案需要與舊版 Bazel 相容,您可以模擬集合,方法是使用所有鍵都對應至 True 的字典。

在測試真值時 (也就是在布林內容中使用,例如 if d:,其中 d 是 depset),只有在 depset 不為空時,才會傳回 True;這項檢查是 O(1) 作業。

Depset 不可變更。應使用建構函式建立,並透過 transitive 引數與其他 depsets 合併或擴增。

order 參數會決定轉換 depset 為可疊代項目時執行的遍歷類型。可能的值有四個:

  • "default" (舊稱 "stable"):順序未指定 (但具決定性)。
  • "postorder" (舊版為 "compile"):從左到右的貼文排序。 具體來說,這會以遞迴方式遍歷所有子項 (從最左側開始),然後遍歷直接元素 (從最左側開始)。
  • "preorder" (舊版為 "naive_link"):從左到右的預先排序。 具體來說,這會先從最左側開始遍歷直接元素,然後以遞迴方式遍歷子項,同樣從最左側開始。
  • "topological" (舊稱 "link"):從根節點到葉節點的拓撲排序。無法保證從左至右。

只有在兩個 depsets 具有相同順序,或其中一個具有 "default" 順序時,才能合併。在後者情況下,產生的 deps 順序會與其他 deps 的順序相同。

Depset 可能包含重複值,但疊代時 (使用 to_list()) 會遭到抑制。重複值可能會干擾排序語意。

成員

to_list

list depset.to_list()

傳回元素清單,其中不含重複項目,且元素順序與 depsets 的遍歷順序相同。請注意,如果元素多次新增至 deps 集合,則順序未指定 (但具決定性)。對於 "default" 排序的依附元件集,以及順序與父項依附元件集不同的子項依附元件集元素,順序也未指定。這個清單是副本,修改清單不會影響 deps 集合,反之亦然。