depset

Informar un problema Ver código fuente Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Es una estructura de datos especializada que admite operaciones de combinación eficientes y tiene un orden de recorrido definido. Se usa con frecuencia para acumular datos de dependencias transitivas en reglas y aspectos. Para obtener más información, consulta aquí.

Los elementos de un conjunto de dependencias deben ser hashables y todos del mismo tipo (como lo define la función type(x) integrada), pero los conjuntos de dependencias no son solo conjuntos de hash y no admiten pruebas de membresía rápidas. Si necesitas un tipo de datos de conjunto general, usa el tipo 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 asignan a True.

Cuando se prueba la verdad (es decir, cuando se usa en un contexto booleano, como if d:, en el que d es un conjunto de dependencias), un conjunto de dependencias es verdadero solo si no está vacío. Esta verificación es una operación de O(1).

Los conjuntos de dependencias son inmutables. Se deben crear con su función de constructor y combinarse o aumentarse con otros conjuntos de dependencias a través del argumento transitive.

El parámetro order determina el tipo de recorrido que se realiza para convertir el conjunto de dependencias en un elemento iterable. Existen cuatro valores posibles:

  • "default" (anteriormente "stable"): El orden no se especifica (pero es determinista).
  • "postorder" (anteriormente "compile"): Es un orden posterior de izquierda a derecha. Específicamente, recorre recursivamente todos los elementos secundarios de izquierda a derecha y, luego, los elementos directos de izquierda a derecha.
  • "preorder" (anteriormente "naive_link"): Es un pedido por adelantado de izquierda a derecha. Específicamente, recorre los elementos directos de izquierda a derecha y, luego, recorre de forma recursiva los elementos secundarios de izquierda a derecha.
  • "topological" (anteriormente "link"): Es un ordenamiento topológico desde la raíz hasta las hojas. No hay garantía de que se muestre de izquierda a derecha.

Solo se pueden combinar dos conjuntos de dependencias si ambos tienen el mismo orden o si uno de ellos tiene el orden "default". En el último caso, el orden del depset resultante será el mismo que el del otro.

Los conjuntos de dependencias pueden contener valores duplicados, pero estos se suprimirán cuando se itere (con to_list()). Los duplicados pueden interferir con la semántica del orden.

Miembros

to_list

list depset.to_list()

Muestra una lista de los elementos, sin duplicados, en el orden de recorrido del conjunto de dependencias. Ten en cuenta que el orden no se especifica (pero es determinista) para los elementos que se agregaron más de una vez al conjunto de dependencias. El orden tampoco se especifica para los conjuntos de dependencias ordenados por "default" ni para los elementos de conjuntos de dependencias secundarios cuyo orden difiere del del conjunto de dependencias superior. La lista es una copia; modificarla no tiene efecto en el conjunto de dependencias y viceversa.