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