Uma estrutura de dados especializada que oferece suporte a operações de mesclagem eficientes e tem uma ordem de transposição definida. É comumente usado para acumular dados de dependências transitivas em regras e aspectos. Para mais informações, consulte este link.
Os elementos de um depset precisam ser hasháveis e todos do mesmo tipo (conforme definido pela função
type(x)
integrada), mas os depsets não são simplesmente conjuntos
de hash e não oferecem suporte a testes de associação rápidos. Se você precisar de um tipo de dado de conjunto geral, use o tipo
Starlark set (disponível desde o Bazel 8.1). Se o arquivo .bzl precisar ser
compatível com versões mais antigas do Bazel, você poderá simular um conjunto usando um dicionário em que todas as chaves
são mapeadas para True
.
Quando testado para verdade (ou seja, quando usado em um contexto booleano, como if d:
, em que
d
é um depset), um depset é verdadeiro se e somente se não estiver vazio. Essa verificação é uma operação
O(1).
Os conjuntos de dependências são imutáveis. Eles precisam ser criados usando a
função do construtor e mesclados ou aumentados com outros
depsets pelo argumento transitive
.
O parâmetro order
determina o tipo de travessia que é feito para converter o
depset em um iterável. Há quatro valores possíveis:
-
"default"
(anteriormente"stable"
): a ordem não é especificada (mas é determinística). -
"postorder"
(anteriormente"compile"
): uma pós-ordenação da esquerda para a direita. Precisamente, isso percorre de maneira recursiva todas as crianças da esquerda para a direita, depois os elementos diretos da esquerda para a direita. -
"preorder"
(anteriormente"naive_link"
): uma ordenação prévia da esquerda para a direita. Mais precisamente, ele percorre os elementos diretos da esquerda para a direita e, em seguida, percorre recursivamente os filhos da esquerda para a direita. -
"topological"
(anteriormente"link"
): uma ordenação topológica da raiz até as folhas. Não há garantia de ordem.
Duas depsets só podem ser mescladas se ambas tiverem a mesma ordem ou se uma delas tiver a ordem "default"
. Nesse último caso, a ordem do depset resultante será a mesma
do outro.
Os conjuntos de dependências podem conter valores duplicados, mas eles serão suprimidos ao iterar (usando
to_list()
). Os valores duplicados podem interferir na semântica
de ordenação.
Membros
to_list
list depset.to_list()
"default"
e para elementos de depsets filhos com ordem diferente da depset pai. A lista é uma cópia. Modificar a lista não afeta o depset e vice-versa.