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