Struktur data khusus yang mendukung operasi penggabungan yang efisien dan memiliki urutan traversal yang ditentukan. Umumnya digunakan untuk mengumpulkan data dari dependensi transitif dalam aturan dan aspek. Untuk mengetahui informasi selengkapnya, lihat di sini.
Elemen depset harus dapat di-hash dan semuanya memiliki jenis yang sama (seperti yang ditentukan oleh fungsi
type(x)
bawaan), tetapi depset bukan sekadar set
hash dan tidak mendukung pengujian keanggotaan yang cepat. Jika Anda memerlukan jenis data set umum, gunakan jenis
set Starlark inti (tersedia sejak Bazel 8.1); jika file .bzl Anda harus
kompatibel dengan rilis Bazel yang lebih lama, Anda dapat menyimulasikan set menggunakan kamus tempat semua kunci
dipetakan ke True
.
Saat diuji kebenarannya (yaitu, saat digunakan dalam konteks Boolean seperti if d:
dengan
d
adalah depset), depset bernilai Benar jika dan hanya jika tidak kosong; pemeriksaan ini adalah operasi
O(1).
Depset tidak dapat diubah. Depset harus dibuat menggunakan
fungsi konstruktor dan digabungkan atau ditambah dengan
depset lain melalui argumen transitive
.
Parameter order
menentukan jenis traversal yang dilakukan untuk mengonversi
depset menjadi iterable. Ada empat kemungkinan nilai:
-
"default"
(sebelumnya"stable"
): Urutan tidak ditentukan (tetapi ditentukan secara deterministik). -
"postorder"
(sebelumnya"compile"
): Urutan pasca-pengurutan dari kiri ke kanan. Secara tepat, ini secara berulang menjelajahi semua turunan dari kiri ke kanan, lalu elemen langsung dari kiri ke kanan. -
"preorder"
(sebelumnya"naive_link"
): Praorder dari kiri ke kanan. Secara khusus, ini akan menjelajahi elemen langsung dari kiri ke kanan terlebih dahulu, lalu secara rekursif menjelajahi turunan dari kiri ke kanan terlebih dahulu. -
"topological"
(sebelumnya"link"
): Pengurutan topologi dari root hingga ke daun. Tidak ada jaminan dari kiri ke kanan.
Dua depset hanya dapat digabungkan jika kedua depset memiliki urutan yang sama, atau salah satunya memiliki
urutan "default"
. Dalam kasus terakhir, urutan depset yang dihasilkan akan sama dengan
urutan yang lain.
Depset dapat berisi nilai duplikat, tetapi nilai ini akan disembunyikan saat melakukan iterasi (menggunakan
to_list()
). Duplikat dapat mengganggu semantik
urutan.
Anggota
to_list
list depset.to_list()
"default"
, dan untuk elemen depset turunan yang urutannya berbeda dengan depset induk. Daftar ini adalah salinan; mengubahnya tidak akan memengaruhi depset dan sebaliknya.