Uma estrutura de dados especializada que oferece suporte a operações de mesclagem eficientes e tem uma ordem de percurso definida. Usada com frequência 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 integrada
type(x)), mas os depsets não são apenas conjuntos de hash
e não oferecem suporte a testes de associação rápidos. Se você precisar de um tipo de dados de conjunto geral, use o tipo de conjunto do
Starlark (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: onde
d é um depset), um depset é verdadeiro se e somente se não estiver vazio. Essa verificação é uma operação O(1)
.
Os depsets são imutáveis. Eles precisam ser criados usando a
função do construtor e mesclados ou aumentados com outros
depsets via o transitive argumento.
O parâmetro order determina o tipo de percurso feito para converter o depset em um iterável. Há quatro valores possíveis:
-
"default"(antigamente"stable"): a ordem não é especificada (mas é determinista). -
"postorder"(antigamente"compile"): uma pós-ordenação da esquerda para a direita. Precisamente, isso percorre recursivamente todos os filhos da esquerda para a direita e, em seguida, os elementos diretos da esquerda para a direita. -
"preorder"(antigamente"naive_link"): uma pré-ordenação da esquerda para a direita. Precisamente, isso percorre os elementos diretos da esquerda para a direita e, em seguida, percorre recursivamente os filhos da esquerda para a direita. -
"topological"(antigamente"link"): uma ordenação topológica da raiz até as folhas. Não há garantia da esquerda para a direita.
Dois depsets só podem ser mesclados se ambos tiverem a mesma ordem ou se um deles tiver a ordem "default". No último caso, a ordem do depset resultante será a mesma do outro.
Os depsets podem conter valores duplicados, mas eles serão suprimidos ao iterar (usando
to_list()). As duplicatas podem interferir na semântica de ordenação.
Membros
to_list
list depset.to_list()
"default" e para elementos de depsets filhos cuja ordem difere da do depset pai. A lista é uma cópia. A modificação dela não afeta o depset e vice-versa.