Depset

効率的なマージ オペレーションをサポートし、定義されたトラバーサル順序を持つ特殊なデータ構造。通常、ルールとアスペクトの推移的依存関係からデータを蓄積するために使用されます。詳細については、こちらをご覧ください。

deps の要素はハッシュ可能で、すべて同じ型(組み込みの type(x) 関数で定義されている)である必要がありますが、deps は単なるハッシュセットではなく、高速メンバーシップ テストをサポートしていません。一般的なセット データ型が必要な場合は、コアの Starlark セット型(Bazel 8.1 以降で使用可能)を使用します。.bzl ファイルが古い Bazel リリースと互換性がある必要がある場合は、すべてのキーが True にマッピングされる辞書を使用してセットをシミュレートできます。

真偽値のテスト(if d: などのブール値コンテキストで使用される場合。ここで、d は depset)では、depset が空でない場合にのみ True になります。このチェックは O(1) オペレーションです。

Depsets は不変です。コンストラクタ関数を使用して作成し、transitive 引数を介して他の depsets とマージまたは拡張する必要があります。

order パラメータは、depset を iterable に変換するために実行される走査の種類を決定します。次の 4 つの値があります。

  • "default"(以前は "stable"): 順序は指定されていません(ただし、決定的です)。
  • "postorder"(以前の "compile"): 左から右への投稿順序。 具体的には、すべての子を左端から順に再帰的にトラバースし、次に直接要素を左端から順にトラバースします。
  • "preorder"(以前の "naive_link"): 左から右への事前順序付け。具体的には、直接要素を左から順にトラバースし、次に子を左から順に再帰的にトラバースします。
  • "topological"(以前は "link"): ルートからリーフまでのトポロジカル順序。左から右への保証はありません。

2 つの depsets は、両方の depsets の順序が同じか、いずれか 1 つの順序が "default" の場合にのみマージできます。後者の場合、結果の depset の順序は、もう一方の順序と同じになります。

Depsets には重複する値が含まれている可能性がありますが、反復処理(to_list() を使用)の際に抑制されます。重複は順序付けのセマンティクスに影響する可能性があります。

メンバー

to_list

list depset.to_list()

重複のない要素のリストを、deps のトラバーサル順序で返します。depsset に複数回追加された要素の順序は指定されていません(ただし、決定論的です)。"default" 順序付き depsets と、親 depset の順序と異なる順序を持つ子 depset の要素についても、順序は指定されません。リストはコピーです。リストを変更しても depset には影響しません。その逆も同様です。