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