効率的なマージ オペレーションをサポートし、定義済みの走査順序を持つ特殊なデータ構造。ルールとアスペクトの推移的依存関係からデータを集約するためによく使用されます。詳細については、こちらをご覧ください。
depset の要素はハッシュ可能で、すべて同じ型(組み込みの type(x)
関数で定義されている)である必要がありますが、depset は単なるハッシュセットではなく、高速なメンバーシップ テストはサポートしていません。一般的なセット データ型が必要な場合は、コア Starlark セット型を使用します(Bazel 8.1 以降で利用可能)。.bzl ファイルが古い Bazel リリースと互換性がある必要がある場合は、すべてのキーが True
にマッピングされる辞書を使用してセットをシミュレートできます。
真偽がテストされる場合(d
が depset である if d:
などのブール値のコンテキストで使用される場合)、depset は空でない場合のみ true です。このチェックは O(1) オペレーションです。
Depset は不変です。コンストラクタ関数を使用して作成し、transitive
引数を介して他の Depset と統合または拡張する必要があります。
order
パラメータは、depset をイテラブルに変換するために実行される走査の種類を決定します。指定可能な値は次の 4 つです。
-
"default"
(旧"stable"
): 順序は指定されません(ただし確定的です)。 -
"postorder"
(旧"compile"
): 左から右の投稿順序。 具体的には、すべての子を左から右に再帰的に走査し、次に直接要素を左から右に走査します。 -
"preorder"
(旧"naive_link"
): 左から右へのプリオーダー。 具体的には、直接要素を左から順に走査し、その後、左から順に子を再帰的に走査します。 -
"topological"
(旧"link"
): ルートからリーフまでのトポロジ順序。左から右への保証はありません。
2 つの depset をマージできるのは、両方の depset の順序が同じか、一方の depset の順序が "default"
の場合のみです。後者の場合、結果の depset の順序は他方の順序と同じになります。
Depset に重複する値が含まれていても、(to_list()
を使用して)反復処理すると抑制されます。重複は順序付けのセマンティクスに干渉する可能性があります。
メンバー
to_list
list depset.to_list()
"default"
順の Depset や、親 Depset の順序と異なる子 Depset の要素の場合も、順序は指定されません。このリストはコピーであるため、リストを変更しても depset には影響しません。その逆も同様です。