디셋

문제 신고 소스 보기 Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

효율적인 병합 작업을 지원하고 정의된 순회 순서가 있는 특수화된 데이터 구조입니다. 일반적으로 규칙 및 측면의 전이 종속 항목에서 데이터를 누적하는 데 사용됩니다. 자세한 내용은 여기를 참고하세요.

depset의 요소는 해싱 가능해야 하며 모두 동일한 유형이어야 합니다 (기본 제공 type(x) 함수에 의해 정의됨). 하지만 depset은 단순히 해시 집합이 아니며 빠른 멤버십 테스트를 지원하지 않습니다. 일반적인 집합 데이터 유형이 필요한 경우 핵심 Starlark 집합 유형 (Bazel 8.1부터 사용 가능)을 사용하세요. .bzl 파일이 이전 Bazel 출시와 호환되어야 하는 경우 모든 키가 True에 매핑되는 사전을 사용하여 집합을 시뮬레이션할 수 있습니다.

참/거짓을 테스트할 때 (즉, d가 depset인 if d:와 같은 불리언 컨텍스트에서 사용되는 경우) depset은 비어 있지 않은 경우에만 true입니다. 이 검사는 O(1) 작업입니다.

Depset은 변경할 수 없습니다. 생성자 함수를 사용하여 만들고 transitive 인수를 통해 다른 종속 항목 집합과 병합하거나 확장해야 합니다.

order 매개변수는 종속 항목 집합을 반복 가능한 것으로 변환하기 위해 실행되는 탐색의 종류를 결정합니다. 가능한 값은 다음과 같습니다.

  • "default"(이전 "stable"): 순서가 지정되지 않았지만 결정론적입니다.
  • "postorder" (이전 "compile"): 왼쪽에서 오른쪽으로 게시물 순서를 지정합니다. 정확히 말하자면, 이 메서드는 모든 하위 요소를 왼쪽에서 오른쪽으로 먼저 순회한 다음 직접 요소를 왼쪽에서 오른쪽으로 먼저 순회합니다.
  • "preorder" (이전 "naive_link"): 왼쪽에서 오른쪽으로 사전 주문합니다. 정확히 말하자면, 이 방법은 왼쪽에서 가장 가까운 직접 요소를 먼저 탐색한 다음 왼쪽에서 가장 가까운 하위 요소를 재귀적으로 탐색합니다.
  • "topological" (이전의 "link"): 루트에서 리프까지의 순서입니다. 왼쪽에서 오른쪽으로 표시된다는 보장은 없습니다.

두 depset은 두 depset의 순서가 모두 같거나 그중 하나의 순서가 "default"인 경우에만 병합할 수 있습니다. 후자의 경우 결과 depset의 순서는 다른 depset의 순서와 동일합니다.

Depset에는 중복 값이 포함될 수 있지만 반복 시 (to_list() 사용) 이러한 값은 억제됩니다. 중복은 순서 시맨틱스를 방해할 수 있습니다.

회원

to_list

list depset.to_list()

depset의 탐색 순서에 따라 중복되지 않는 요소 목록을 반환합니다. depset에 두 번 이상 추가된 요소의 순서는 지정되지 않지만 결정론적입니다. 또한 "default" 순서가 지정된 depset과 순서가 상위 depset의 순서와 다른 하위 depset의 요소에는 순서가 지정되지 않습니다. 이 목록은 사본입니다. 이 목록을 수정해도 depset에는 영향을 미치지 않으며 그 반대의 경우도 마찬가지입니다.