Es una estructura de datos especializada que admite operaciones de combinación eficientes y tiene un orden de recorrido definido. Se usa comúnmente para acumular datos de dependencias transitivas en reglas y aspectos. Para obtener más información, consulta aquí.
Los elementos de un depset deben ser hashable y todos del mismo tipo (según lo define la función integrada
type(x) function), pero los depsets no son simplemente hash
sets y no admiten pruebas de membresía rápidas. Si necesitas un tipo de datos de conjunto general, usa el tipo de conjunto de Starlark principal
(disponible desde Bazel 8.1). Si tu archivo .bzl debe
ser compatible con versiones anteriores de Bazel, puedes simular un conjunto con un diccionario en el que todas las claves
se asignen a True.
Cuando se prueba la verdad (es decir, cuando se usa en un contexto booleano como if d: donde
d es un depset), un depset es verdadero si y solo si no está vacío. Esta verificación es una operación O(1)
.
Los depsets son inmutables. Deben crearse con su
función de constructor y combinarse o aumentarse con otros
depsets a través del transitive argumento.
El parámetro order determina el tipo de recorrido que se realiza para convertir el
depset en un iterable. Hay cuatro valores posibles:
-
"default"(antes"stable"): El orden no está especificado (pero es determinista). -
"postorder"(antes"compile"): Un orden posterior de izquierda a derecha. En concreto, esto recorre de forma recursiva todos los elementos secundarios de izquierda a derecha y, luego, los elementos directos de izquierda a derecha. -
"preorder"(antes"naive_link"): Un orden previo de izquierda a derecha. En concreto, esto recorre los elementos directos de izquierda a derecha y, luego, recorre de forma recursiva los elementos secundarios de izquierda a derecha. -
"topological"(antes"link"): Un orden topológico desde la raíz hasta las hojas. No hay garantía de izquierda a derecha.
Solo se pueden combinar dos depsets si ambos tienen el mismo orden o si uno de ellos tiene
"default" orden. En este último caso, el orden del depset resultante será el mismo que
el del otro.
Los depsets pueden contener valores duplicados, pero se suprimirán cuando se itere (con
to_list()). Los duplicados pueden interferir con la semántica de ordenamiento.
Miembros
to_list
list depset.to_list()
"default" ni para los elementos de los depsets secundarios cuyo orden difiere del depset superior. La lista es una copia. Si la modificas, no tendrá ningún efecto en el depset y viceversa.