Uma estrutura de dados especializada que oferece suporte a operações de mesclagem eficientes e tem uma ordem de travessia definida. Usado com frequência para acumular dados de dependências transitivas em regras e aspectos. Para mais informações, consulte aqui.
Os elementos de um conjunto de dependências precisam ser hashable e todos do mesmo tipo (conforme definido pela função integrada type(x)
), mas os conjuntos de dependências não são simplesmente conjuntos de hash e não oferecem suporte a testes rápidos de associação. Se você precisar de um tipo de dados de conjunto geral, use o tipo conjunto do Starlark principal (disponível desde o Bazel 8.1). Se o arquivo .bzl precisar ser compatível com versões mais antigas do Bazel, simule um conjunto usando um dicionário em que todas as chaves são mapeadas para True
.
Quando testado para veracidade (ou seja, quando usado em um contexto booleano como if d:
em que d
é um conjunto de dependências), um conjunto de dependências é 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 de construtor e mesclados ou aumentados com outros conjuntos de dependências usando o argumento transitive
.
O parâmetro order
determina o tipo de travessia feita para converter o
depset em um iterável. Há quatro valores possíveis:
-
"default"
(antigo"stable"
): a ordem não é especificada (mas é determinista). -
"postorder"
(antigo"compile"
): uma ordenação de postagem da esquerda para a direita. Especificamente, isso percorre recursivamente todos os filhos da esquerda para a direita e, em seguida, os elementos diretos da esquerda para a direita. -
"preorder"
(antigo"naive_link"
): uma pré-ordem da esquerda para a direita. Especificamente, isso percorre os elementos diretos da esquerda para a direita e, em seguida, percorre recursivamente os filhos da esquerda para a direita. -
"topological"
(antigo"link"
): uma ordenação topológica da raiz até as folhas. Não há garantia da esquerda para a direita.
Dois conjuntos de dependências só podem ser mesclados se ambos tiverem a mesma ordem ou se um deles tiver a ordem "default"
. No último caso, a ordem do conjunto de dependências resultante será a mesma da outra.
Os depsets podem conter valores duplicados, mas eles serão suprimidos ao iterar (usando
to_list()
). Os duplicados 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. Modificá-la não afeta o conjunto de dependências e vice-versa.