這是一種專門的資料結構,可支援有效率的合併作業,並具有定義的遍歷順序。通常用於從規則和構面中的遞移依附元件累積資料。詳情請參閱這篇文章。
deps 的元素必須可雜湊,且類型都相同 (如內建的 type(x)
函式所定義),但 deps 並非單純的雜湊集,也不支援快速成員資格測試。如需一般集合資料型別,請使用核心 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"
順序時,才能合併。在後者情況下,產生的 depsets 順序會與其他 depsets 的順序相同。
Depset 可能包含重複值,但疊代時 (使用 to_list()
) 會遭到抑制。重複項目可能會干擾排序語意。
成員
to_list
list depset.to_list()
"default"
排序的依附元件集,以及順序與父項依附元件集不同的子項依附元件集元素,順序也未指定。這個清單是副本,修改清單不會影響 deps 集合,反之亦然。