Depset

回報問題 查看來源 Nightly

特殊資料結構,支援高效率的合併作業,且已定義週遊順序。通常用於從規則和層面中的遞移依附元件累積資料。詳情請參閱這裡

解碼器的元素必須可雜湊且所有相同類型 (由內建 type(x) 函式定義),但 depset 並非只是雜湊集,不支援快速成員資格測試。如果您需要一般集的資料類型,可以使用字典模擬這種資料類型,字典所有鍵都會對應至 True

Depset 無法變更。應使用其建構函式函式建立,並透過 transitive 引數與其他解碼器合併或擴增。

order 參數會決定將 Depset 轉換為可疊代項目所完成的周遊種類。可能的值有四種:

  • "default" (先前為 "stable"):未指定順序 (但具有確定性)。
  • "postorder" (原為 "compile"):排序後,從左到右。實際上,這會以遞迴方式掃遍所有子項,從最左邊開始,再從最左邊的直接元素進入。
  • "preorder" (原為 "naive_link"):從左到右預購。大致來說,這會掃遍最左側的直接元素,然後以遞迴方式穿越最左側的子項。
  • "topological" (先前為 "link"):從根層級向下到葉子的順序排序。我們沒有從左到右的保證。

只有在兩個開啟器的順序相同,或其中一個偏移器有 "default" 順序的情況下,才能合併兩個解碼器。如果是後者,產生的 Depset 順序會與另一個的順序相同。

Depset 可能包含重複的值,但在疊代時 (使用 to_list()) 會隱藏。重複的值可能會影響排序語意。

成員

to_list

list depset.to_list()

按照模式的遍歷順序傳回元素清單 (不含重複項目)。請注意,對於加入至位置超過一次的元素,系統不會指定順序 (但確定性)。對於 "default" 排序的 depset,以及其順序與父項偏移不同,子項偏移元素也會指定順序。這份清單是副本,修改這份清單並不會對解碼器產生影響,反之亦然。