Một cấu trúc dữ liệu chuyên biệt hỗ trợ các thao tác hợp nhất hiệu quả và có thứ tự duyệt được xác định. Thường dùng để tích luỹ dữ liệu từ các phần phụ thuộc bắc cầu trong quy tắc và khía cạnh. Để biết thêm thông tin, hãy xem tại đây.
Các phần tử của depset phải có thể băm và tất cả đều thuộc cùng một loại (theo định nghĩa của hàm tích hợp
type(x)), nhưng depset không chỉ là tập hợp băm
và không hỗ trợ các bài kiểm tra nhanh về tư cách thành viên. Nếu bạn cần một kiểu dữ liệu tập hợp chung, hãy sử dụng kiểu tập hợp Starlark cốt lõi
(có từ Bazel 8.1); nếu tệp .bzl của bạn cần
tương thích với các bản phát hành Bazel cũ hơn, bạn có thể mô phỏng một tập hợp bằng cách sử dụng từ điển trong đó tất cả các khoá
ánh xạ đến True.
Khi được kiểm tra về tính đúng (tức là khi được dùng trong bối cảnh Boolean, chẳng hạn như if d: trong đó
d là depset), depset sẽ là True nếu và chỉ khi depset đó không trống; thao tác kiểm tra này là thao tác O(1)
.
Depset là bất biến. Bạn nên tạo depset bằng hàm khởi tạo và hợp nhất hoặc tăng cường depset bằng các depset khác thông qua đối số transitive.
Tham số order xác định loại duyệt được thực hiện để chuyển đổi depset thành một đối tượng có thể lặp lại. Có 4 giá trị có thể có:
-
"default"(trước đây là"stable"): Thứ tự không được chỉ định (nhưng mang tính xác định). -
"postorder"(trước đây là"compile"): Thứ tự sau từ trái sang phải. Chính xác là thao tác này sẽ duyệt đệ quy tất cả các phần tử con từ trái sang phải, sau đó là các phần tử trực tiếp từ trái sang phải. -
"preorder"(trước đây là"naive_link"): Thứ tự trước từ trái sang phải. Chính xác là thao tác này sẽ duyệt các phần tử trực tiếp từ trái sang phải, sau đó duyệt đệ quy các phần tử con từ trái sang phải. -
"topological"(trước đây là"link"): Thứ tự theo cấu trúc liên kết từ gốc xuống lá. Không có gì đảm bảo thứ tự từ trái sang phải.
Bạn chỉ có thể hợp nhất 2 depset nếu cả 2 depset đều có cùng thứ tự hoặc một trong số đó có thứ tự "default". Trong trường hợp sau, thứ tự của depset kết quả sẽ giống với thứ tự của depset còn lại.
Depset có thể chứa các giá trị trùng lặp nhưng các giá trị này sẽ bị loại bỏ khi lặp lại (dùng
to_list()). Các giá trị trùng lặp có thể gây trở ngại cho ngữ nghĩa sắp xếp.
Hội viên
to_list
list depset.to_list()
"default" và đối với các phần tử của depset con có thứ tự khác với thứ tự của depset mẹ. Danh sách này là bản sao; việc sửa đổi danh sách này không ảnh hưởng đến depset và ngược lại.