Depset

効率的なマージ操作をサポートし、走査順序が定義された、特殊なデータ構造。一般に、ルールやアスペクトにおける推移的依存関係からのデータを収集するために使用されます。詳しくはこちらをご覧ください。

depset の要素は、(組み込みの type(x) 関数で定義されているように)ハッシュ可能で、すべて同じ型でなければなりませんが、依存関係は単なるハッシュセットではなく、高速メンバーシップ テストをサポートしていません。一般的なデータ型が必要な場合は、すべてのキーが True にマッピングされる辞書を使用して、データ型をシミュレートできます。

依存関係は変更できません。コンストラクタ関数を使用して作成し、transitive 引数を使用して他の依存関係と結合または拡張する必要があります。

order パラメータは、depset をイテラブルに変換するために実行される走査の種類を決定します。指定可能な値は次の 4 つです。

  • "default"(旧 "stable"): 順序は指定されません(ただし確定的)。
  • "postorder"(旧 "compile"): 左から右へのポストオーダー。正確には、すべての子を左端から順に再帰的に走査し、次に直接要素を左端から順に走査します。
  • "preorder"(旧 "naive_link"): 左から右への予約購入。正確には、直接要素を左端から順に走査し、次に子を左端から順に再帰的に走査します。
  • "topological"(旧称 "link"): ルートからリーフまでのトポロジ順序。左から右への記述は保証されません。

2 つの依存関係を結合できるのは、両方の依存関係の順序が同じか、一方のデプセットの順序が "default" の場合のみです。後者の場合、結果として得られる depset の順序は他方の順序と同じです。

依存関係に重複する値が含まれている場合もありますが、(to_list() を使用して)反復処理を行う際は重複が抑制されます。重複があると、順序付けのセマンティクスが妨げられることがあります。

メンバー

to_list

list depset.to_list()

依存関係のない要素のリストを、依存関係の走査順で返します。depset に複数回追加された要素については、順序は指定されていない(ただし確定的)ことに注意してください。また、"default" の順序を持つ depset の要素や、親の depset と順序が異なる子の depset の要素でも、Order は指定されません。リストはコピーです。変更しても依存関係セットには影響せず、その逆も同様です。