Uma estrutura de dados especializada que oferece suporte a operações de mesclagem eficientes e tem uma ordem de travessia definida. É comumente usado para acumular dados de dependências transitivas em regras e aspectos. Clique aqui para mais informações.
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 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, simule um usando um dicionário em que todas as chaves são mapeadas para True
.
Os conjuntos de dependências são imutáveis. Elas precisam ser criadas usando a função de construtor e mescladas ou aumentadas com outras dependências pelo argumento transitive
.
O parâmetro order
determina o tipo de travessia feito para converter o conjunto em um iterável. Há quatro valores possíveis:
"default"
(anteriormente"stable"
): a ordem não é especificada, mas é determinista."postorder"
(antigo"compile"
): uma pós-ordem da esquerda para a direita. Exatamente, isso transferirá de forma recursiva todos os filhos mais à esquerda primeiro e, em seguida, os elementos diretos mais à esquerda primeiro."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á garantias da esquerda para a direita.
Dois depssets só poderão ser mesclados se ambos tiverem a mesma ordem ou se um deles tiver a ordem "default"
. No último caso, a ordem do dispositivo resultante será a mesma que a 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. Observe que a ordem não é especificada (mas determinista) para os elementos que foram adicionados mais de uma vez ao conjunto. 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.