hoãn

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()

Trả về danh sách các phần tử (không có phần tử trùng lặp) theo thứ tự duyệt của depset. Xin lưu ý rằng thứ tự không được chỉ định (nhưng mang tính xác định) đối với các phần tử được thêm nhiều lần vào depset. Thứ tự cũng không được chỉ định đối với các depset được sắp xếp theo "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.