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