Uma estrutura de dados especializada que suporta operações de mesclagem eficientes e tem uma ordem de travessia definida. Geralmente usado para acumular dados de dependências transitivas em regras e aspectos. Confira mais informações aqui.
Os elementos de um depset precisam ser hashes e ser todos do mesmo tipo (como 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 rápidos de associação. Se você precisar de um tipo de dados de conjunto geral, simule um usando um dicionário em que todas as chaves sejam mapeadas para True
.
Os Depsets são imutáveis. Eles precisam ser criados usando a função do construtor e mesclados ou aumentados com outros depsets 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"
(anteriormente"stable"
): a ordem não é especificada, mas é determinista."postorder"
(anteriormente"compile"
): uma pós-ordenação da esquerda para a direita. Isso afeta de maneira recursiva todos os filhos mais à esquerda primeiro e os elementos diretos mais à esquerda primeiro."preorder"
(antigo"naive_link"
): uma encomenda da esquerda para a direita. Isso atravessa os elementos diretos mais à esquerda primeiro e, em seguida, percorre os filhos mais à esquerda primeiro."topological"
(antiga"link"
): uma ordem topológica da raiz até as folhas. Não há garantia de "da esquerda para a direita".
Dois depsets 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 depset resultante será a mesma que a 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.
Participantes
to_list
list depset.to_list()Retorna uma lista dos elementos, sem duplicatas, na ordem de travessia do depset. A ordem não é especificada (mas é determinística) para elementos adicionados mais de uma vez ao painel. A ordem também não é especificada para depsets ordenados por
"default"
e para elementos de depsets filhos cuja ordem é diferente da do depset pai. A lista é uma cópia. Modificá-la não afeta o painel e vice-versa.