โครงสร้างข้อมูลเฉพาะที่รองรับการผสานอย่างมีประสิทธิภาพและมีลำดับการข้ามผ่านที่กำหนด โดยทั่วไปจะใช้เพื่อสะสมข้อมูลจากการพึ่งพิงแบบส่งผ่านในกฎและแง่มุมต่างๆ ดูข้อมูลเพิ่มเติมได้ที่ ที่นี่
องค์ประกอบของ depset ต้องเป็นแบบ hashable และเป็นประเภทเดียวกันทั้งหมด (ตามที่กำหนดโดยฟังก์ชันในตัว
type(x)) แต่ depset ไม่ใช่เพียงแค่ชุด hash
และไม่รองรับการทดสอบการเป็นสมาชิกอย่างรวดเร็ว หากคุณต้องการประเภทข้อมูลชุดทั่วไป ให้ใช้ประเภทชุด
Starlark หลัก (พร้อมใช้งานตั้งแต่ Bazel 8.1) หรือหากไฟล์ .bzl ต้อง
เข้ากันได้กับ Bazel เวอร์ชันเก่า คุณสามารถจำลองชุดได้โดยใช้พจนานุกรมที่คีย์ทั้งหมด
แมปกับ True
เมื่อทดสอบความจริง (นั่นคือ เมื่อใช้ในบริบทบูลีน เช่น if d: โดยที่
d เป็น depset) depset จะเป็นจริงก็ต่อเมื่อไม่ใช่ depset ว่างเปล่า การตรวจสอบนี้เป็นการดำเนินการ O(1)
Depset เป็นแบบเปลี่ยนแปลงไม่ได้ คุณควรสร้าง depset โดยใช้
ฟังก์ชันตัวสร้างและผสานหรือเพิ่ม depset อื่นๆ ผ่าน transitive อาร์กิวเมนต์
พารามิเตอร์ order จะกำหนดประเภทการข้ามผ่านที่จะใช้เพื่อแปลง depset เป็น iterable โดยมีค่าที่เป็นไปได้ 4 ค่า ดังนี้
-
"default"(เดิมชื่อ"stable"): ไม่ได้ระบุลำดับ (แต่เป็นแบบ กำหนดได้) -
"postorder"(เดิมชื่อ"compile"): การจัดลำดับหลังแบบจากซ้ายไปขวา กล่าวคือ การข้ามผ่านแบบเรียกซ้ำองค์ประกอบย่อยทั้งหมดจากซ้ายสุดไปขวาสุดก่อน แล้วจึงข้ามผ่านองค์ประกอบโดยตรง จากซ้ายสุดไปขวาสุด -
"preorder"(เดิมชื่อ"naive_link"): การจัดลำดับก่อนแบบจากซ้ายไปขวา กล่าวคือ การข้ามผ่านองค์ประกอบโดยตรงจากซ้ายสุดไปขวาสุดก่อน แล้วจึงข้ามผ่านองค์ประกอบย่อยแบบเรียกซ้ำจากซ้ายสุดไปขวาสุด -
"topological"(เดิมชื่อ"link"): การจัดลำดับโทโพโลยีจากรูท ลงไปถึงลีฟ ไม่มีการรับประกันการจัดลำดับจากซ้ายไปขวา
คุณจะผสาน depset 2 รายการได้ก็ต่อเมื่อ depset ทั้ง 2 รายการมีลำดับเดียวกัน หรือ depset รายการใดรายการหนึ่งมีลำดับ "default" ในกรณีหลังนี้ ลำดับของ depset ที่ได้จะเป็นลำดับเดียวกับ depset อื่น
Depset อาจมีค่าที่ซ้ำกัน แต่ระบบจะระงับค่าเหล่านี้เมื่อมีการวนซ้ำ (โดยใช้
to_list()) ค่าที่ซ้ำกันอาจรบกวนความหมายของการจัดลำดับ
สมาชิก
to_list
list depset.to_list()
"default" และสำหรับองค์ประกอบของ depset ย่อยที่มีลำดับแตกต่างจาก depset ระดับบนสุด รายการนี้เป็นสำเนา การแก้ไขรายการนี้จะไม่มีผลกับ depset และในทางกลับกัน