dependência

Reportar um problema Ver a fonte Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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()

Retorna uma lista dos elementos, sem duplicações, na ordem de travessia do depset. A ordem é indeterminada (mas determinística) para elementos que foram adicionados mais de uma vez ao depset. A ordem também não é especificada para depsets ordenados por "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.