Depset

回報問題 查看來源 Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

deps 的元素必須可雜湊處理,且類型都相同 (如內建 type(x) 函式所定義),但 deps 並非單純的雜湊集,也不支援快速成員資格測試。如需一般集合資料型別,您可以使用字典模擬,其中所有鍵都會對應至 True

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

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

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

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

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

成員

to_list

list depset.to_list()

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