효율적인 병합 작업을 지원하고 순회 순서가 정의된 특수 데이터 구조입니다. 흔히 규칙 및 측면에서 전이 종속 항목의 데이터를 누적하는 데 사용됩니다. 자세한 내용은 여기를 참고하세요.
depset의 요소는 해시 가능해야 하고 모두 동일한 유형 (기본 제공
type(x) 함수로 정의됨)이어야 하지만 depsets는 단순한 해시
집합이 아니며 빠른 멤버십 테스트를 지원하지 않습니다. 일반 집합 데이터 유형이 필요한 경우 핵심
Starlark 집합 유형 (Bazel 8.1부터 사용 가능)을 사용합니다. .bzl 파일이 이전 Bazel 출시 버전과 호환되어야 하는 경우 모든 키가 True에 매핑되는 사전을 사용하여 집합을 시뮬레이션할 수 있습니다.
진실을 테스트할 때 (즉, if d:와 같은 불리언 컨텍스트에서 사용되는 경우
d가 depset인 경우) depset은 비어 있지 않은 경우에만 True입니다. 이 검사는 O(1)
작업입니다.
Depsets는 변경할 수 없습니다. 생성자 함수를 사용하여 만들고
다른 depsets와
병합하거나 보강해야 합니다.transitive
order 매개변수는 depset을 반복 가능한 항목으로 변환하기 위해 수행되는 순회 유형을 결정합니다. 가능한 4가지 값은 다음과 같습니다.
-
"default"(이전에는"stable"): 순서가 지정되지 않았지만 결정적입니다. -
"postorder"(이전에는"compile"): 왼쪽에서 오른쪽으로의 후순위 순서입니다. 정확히 말하면 모든 하위 요소를 왼쪽에서 오른쪽으로 먼저 재귀적으로 순회한 다음 직접 요소를 왼쪽에서 오른쪽으로 먼저 순회합니다. -
"preorder"(이전에는"naive_link"): 왼쪽에서 오른쪽으로의 선순위 순서입니다. 정확히 말하면 직접 요소를 왼쪽에서 오른쪽으로 먼저 순회한 다음 하위 요소를 왼쪽에서 오른쪽으로 먼저 재귀적으로 순회합니다. -
"topological"(이전에는"link"): 루트에서 리프까지의 위상 순서입니다. 왼쪽에서 오른쪽으로의 보장은 없습니다.
두 depsets가 동일한 순서를 갖거나 둘 중 하나가 "default" 순서를 갖는 경우에만 두 depsets를 병합할 수 있습니다. 후자의 경우 결과 depset의 순서는 다른 depset의 순서와 동일합니다.
Depsets는 중복 값을 포함할 수 있지만 반복할 때 (to_list() 사용) 이러한 값은 표시되지 않습니다. 중복은 순서 지정 의미 체계를 방해할 수 있습니다.
회원
to_list
list depset.to_list()
"default" 순서의 depsets와 순서가 상위 depset과 다른 하위 depsets의 요소에 대해서도 지정되지 않습니다. 목록은 사본입니다. 목록을 수정해도 depset에 영향을 미치지 않으며 그 반대의 경우도 마찬가지입니다.