Depset

एक खास तरह का डेटा स्ट्रक्चर, जिसकी मदद से डेटा को तेज़ी से मर्ज किया जा सकता है. साथ ही, इसमें एक तय किया गया ट्रैवर्सल ऑर्डर होता है. आम तौर पर, इसका इस्तेमाल नियमों और आसपेक्ट में ट्रांज़िटिव डिपेंडेंसी से डेटा इकट्ठा करने के लिए किया जाता है. ज़्यादा जानकारी के लिए, यहां जाएं.

किसी depset के एलिमेंट ऐसे होने चाहिए जिन्हें हैश किया जा सके. साथ ही, वे सभी एक ही टाइप के होने चाहिए. यह टाइप बिल्ट-इन type(x) फ़ंक्शन से तय किया जाता है. हालांकि, depsets सिर्फ़ हैश सेट नहीं होते और ये सदस्यता की जांच तेज़ी से करने की सुविधा के साथ काम नहीं करते. अगर आपको सामान्य सेट डेटाटाइप की ज़रूरत है, तो कोर Starlark सेट टाइप का इस्तेमाल करें. यह Bazel 8.1 से उपलब्ध है. अगर आपकी .bzl फ़ाइल को Bazel के पुराने वर्शन के साथ काम करना है, तो डिक्शनरी का इस्तेमाल करके सेट को सिम्युलेट किया जा सकता है. इसमें सभी कुंजियां True पर मैप होती हैं.

जब किसी डीपसेट की जांच की जाती है, तब यह सिर्फ़ तब सही होता है, जब यह खाली न हो. जांच करने का यह तरीका O(1) ऑपरेशन है. जांच तब की जाती है, जब डीपसेट का इस्तेमाल बूलियन कॉन्टेक्स्ट में किया जाता है. जैसे, if d: जहां if d: एक डीपसेट है.d

Depsets में बदलाव नहीं किया जा सकता. इन्हें इनके कंस्ट्रक्टर फ़ंक्शन का इस्तेमाल करके बनाया जाना चाहिए. साथ ही, transitive आर्ग्युमेंट के ज़रिए, इन्हें अन्य depsets के साथ मर्ज या ऑगमेंट किया जाना चाहिए.

depset को दोहराए जा सकने वाले ऑब्जेक्ट में बदलने के लिए किस तरह का ट्रैवर्सल किया जाता है, वह order पैरामीटर से तय होता है. इन चार वैल्यू का इस्तेमाल किया जा सकता है:

  • "default" (पहले यह वैल्यू "stable" थी): ऑर्डर की जानकारी नहीं दी गई है (लेकिन यह तय है).
  • "postorder" (पहले यह वैल्यू "compile" थी): इसमें बाएं से दाएं, पोस्ट-ऑर्डर में प्रोसेसिंग होती है. यह फ़ंक्शन, सभी चाइल्ड एलीमेंट को बार-बार बाईं ओर से दाईं ओर प्रोसेस करता है. इसके बाद, डायरेक्ट एलीमेंट को बाईं ओर से दाईं ओर प्रोसेस करता है.
  • "preorder" (पहले यह वैल्यू "naive_link" थी): इसमें बाएं से दाएं, प्री-ऑर्डर में प्रोसेसिंग होती है. यह फ़ंक्शन, सबसे पहले डायरेक्ट एलीमेंट को बाईं ओर से दाईं ओर प्रोसेस करता है. इसके बाद, चाइल्ड एलीमेंट को बार-बार बाईं ओर से दाईं ओर प्रोसेस करता है.
  • "topological" (पहले यह वैल्यू "link" थी): इसमें रूट से लेकर लीफ़ तक के नोड में टोपोलॉजिकल क्रम में प्रोसेसिंग होती है. इस बात की कोई गारंटी नहीं है कि प्रोसेसिंग बाईं से दाईं ओर होगी.

दो depsets को सिर्फ़ तब मर्ज किया जा सकता है, जब दोनों depsets का क्रम एक जैसा हो या उनमें से किसी एक का क्रम "default" हो. दूसरे मामले में, नतीजे के तौर पर मिले depset का क्रम, दूसरे depset के क्रम जैसा ही होगा.

Depsets में डुप्लीकेट वैल्यू हो सकती हैं, लेकिन to_list() का इस्तेमाल करके दोहराने पर इन्हें छिपा दिया जाएगा. डुप्लीकेट वैल्यू, क्रम से जुड़ी सिमैंटिक में रुकावट डाल सकती हैं.

सदस्य

to_list

list depset.to_list()

यह फ़ंक्शन, depset के ट्रैवर्सल ऑर्डर में मौजूद एलिमेंट की सूची दिखाता है. इसमें डुप्लीकेट एलिमेंट शामिल नहीं होते. ध्यान दें कि जिन एलिमेंट को depset में एक से ज़्यादा बार जोड़ा गया था उनके लिए, क्रम तय बताया नहीं गया है. हालांकि, यह क्रम तय होता है. "default"-ऑर्डर किए गए depsets के ऑर्डर के बारे में भी बताया नहीं गया है. साथ ही, उन चाइल्ड depsets के एलिमेंट के ऑर्डर के बारे में भी बताया नहीं गया है जिनका ऑर्डर, पैरंट depset से अलग है. यह सूची एक कॉपी है. इसमें बदलाव करने से, depset पर कोई असर नहीं पड़ता. इसी तरह, depset में बदलाव करने से सूची पर कोई असर नहीं पड़ता.