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