dependência

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.