BazelCon 2022 findet vom 16. bis 17. November in New York und online statt.
Jetzt anmelden

Depset

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Eine spezielle Datenstruktur, die effiziente Zusammenführungsvorgänge unterstützt und eine definierte Durchlaufreihenfolge hat. Wird häufig verwendet, um Daten aus transitiven Abhängigkeiten in Regeln und Aspekten zu akkumulieren. Weitere Informationen

Die Elemente einer Depset-Datei müssen gehasht werden und denselben Typ haben (wie von der integrierten Funktion "x" definiert). Depsets sind jedoch nicht einfach Hash-Sätze und unterstützen keine schnellen Mitgliedschaftstests. Wenn Sie einen allgemeinen Datentyp angeben möchten, können Sie einen Typ mit einem Wörterbuch simulieren, in dem alle Schlüssel True zugeordnet sind.

Depsets sind unveränderlich. Sie sollten mit ihrer Konstruktorfunktion erstellt und über das Argument transitive mit anderen Desetsets zusammengeführt oder erweitert werden.

Der Parameter order bestimmt die Art des Durchlaufs, bei dem das Depset in einen iterierbaren Zustand konvertiert wird. Es gibt vier mögliche Werte:

  • "default" (früher "stable"): Die Reihenfolge ist nicht angegeben (aber deterministisch).
  • "postorder" (früher "compile"): Nach links angeordnete Rechtsreihenfolge. Genau genommen wird sie rekursiv alle untergeordneten Elemente durchquert, dann folgen die direkten Elemente ganz links.
  • "preorder" (früher "naive_link"): Eine Leserichtung von links nach rechts. Dabei werden die direkten Elemente ganz links durchlaufen.
  • "topological" (früher "link"): Eine hierarchische Anordnung vom Stamm bis zu den Blättern. Es gibt keine linksläufige Garantie.

Zwei Depsets dürfen nur zusammengeführt werden, wenn beide Depsets dieselbe Reihenfolge haben oder eine von ihnen eine "default"-Reihenfolge hat. Im letzteren Fall ist die Reihenfolge der resultierenden Depset mit der Reihenfolge der anderen identisch.

Depsets können doppelte Werte enthalten, die jedoch beim Iterieren mit to_list() unterdrückt werden. Duplikate können die Semantik der Reihenfolge beeinträchtigen.

Mitglieder

to_list

list depset.to_list()

Gibt eine Liste der Elemente ohne Duplikate in der Durchlaufreihenfolge des Depsets zurück. Beachten Sie, dass die Reihenfolge für Elemente, die mehrmals zur Depset hinzugefügt wurden, nicht angegeben (aber deterministisch) ist. Die Reihenfolge wurde auch für "default"-geordnete Depsets und für Elemente untergeordneter Depsets nicht angegeben, deren Reihenfolge von der der übergeordneten Depsets abweicht. Die Liste ist eine Kopie. Änderungen daran haben keine Auswirkungen auf den Depset und umgekehrt.