Depset

โครงสร้างข้อมูลเฉพาะที่รองรับการดำเนินการผสานอย่างมีประสิทธิภาพและมีลำดับการข้ามที่กำหนด โดยทั่วไปจะใช้เพื่อรวบรวมข้อมูลจากการอ้างอิงแบบทรานซิทีฟในกฎและแง่มุมต่างๆ ดูข้อมูลเพิ่มเติมได้ที่นี่

องค์ประกอบของ Depset ต้องแฮชได้และเป็นประเภทเดียวกันทั้งหมด (ตามที่กำหนดโดยฟังก์ชัน type(x) ในตัว) แต่ Depset ไม่ใช่เพียงแค่แฮช เซ็ตและไม่รองรับการทดสอบการเป็นสมาชิกอย่างรวดเร็ว หากต้องการประเภทข้อมูลชุดทั่วไป ให้ใช้ประเภท Starlark set หลัก (พร้อมใช้งานตั้งแต่ Bazel 8.1) หากไฟล์ .bzl ต้อง เข้ากันได้กับ Bazel รุ่นเก่า คุณสามารถจำลองชุดได้โดยใช้พจนานุกรมที่คีย์ทั้งหมด แมปกับ True

เมื่อทดสอบค่าความจริง (กล่าวคือ เมื่อใช้ในบริบทบูลีน เช่น if d: ที่ d เป็น depset) depset จะเป็น True ก็ต่อเมื่อไม่ใช่ depset ว่างเปล่าเท่านั้น การตรวจสอบนี้เป็นการดำเนินการ O(1)

Depset จะเปลี่ยนแปลงไม่ได้ โดยควรสร้างโดยใช้ฟังก์ชันตัวสร้างและผสานหรือเพิ่มด้วย Depset อื่นๆ ผ่านอาร์กิวเมนต์ 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()

แสดงผลรายการองค์ประกอบโดยไม่มีรายการที่ซ้ำกันตามลำดับการข้ามของ depset โปรดทราบว่าลำดับจะไม่ได้ระบุ (แต่กำหนดได้) สำหรับองค์ประกอบที่เพิ่มลงใน depset มากกว่า 1 ครั้ง นอกจากนี้ ยังไม่ได้ระบุลำดับสำหรับ "default"-ordered depsets และสำหรับองค์ประกอบของ child depsets ที่มีลำดับแตกต่างจากของ parent depset รายการนี้เป็นสำเนา การแก้ไขรายการนี้จะไม่มีผลต่อชุดการขึ้นต่อกัน และในทางกลับกัน