depset

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

Muestra una lista de los elementos, sin duplicados, en el orden de recorrido del depset. Ten en cuenta que el orden no está especificado (pero es determinista) para los elementos que se agregaron más de una vez al depset. El orden tampoco se especifica para los depsets ordenados por "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.