यह कमांड perlmroapi है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे कि उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।
कार्यक्रम:
नाम
perlmroapi - पर्ल विधि रिज़ॉल्यूशन प्लगइन इंटरफ़ेस
वर्णन
पर्ल 5.10.1 के अनुसार विधि रिज़ॉल्यूशन ऑर्डर को प्लग करने और उपयोग करने के लिए एक नया इंटरफ़ेस है
डिफ़ॉल्ट के अलावा अन्य (रैखिक गहराई पहली खोज)। C3 विधि समाधान क्रम जोड़ा गया
5.10.0 में इसके पर्ल-स्पेस इंटरफ़ेस को बदले बिना, एक प्लगइन के रूप में पुनः कार्यान्वित किया गया है।
प्रत्येक प्लगइन को निम्नलिखित संरचना प्रदान करके स्वयं को पंजीकृत करना चाहिए
संरचना mro_alg {
एवी *(*संकल्प)(पीटीएचएक्स_ एचवी *स्टैश, यू32 स्तर);
स्थिरांक चार *नाम;
U16 लंबाई;
U16 केफ़्लैग;
U32 हैश;
};
और "Perl_mro_register" को कॉल कर रहे हैं:
Perl_mro_register(aTHX_ &my_mro_alg);
संकल्प
रैखिककरण फ़ंक्शन का सूचक, नीचे वर्णित है।
नाम
एमआरओ का नाम, आईएसओ-8859-1 या यूटीएफ-8 में।
लंबाई
नाम की लंबाई.
kflags
यदि नाम UTF-8 में दिया गया है, तो इसे "HVhek_UTF8" पर सेट करें। मान को सीधे रूप में पारित किया जाता है
पैरामीटर kflags से "hv_common()"।
हैश
एमआरओ के नाम के लिए पूर्व-गणना किया गया हैश मान, या 0।
कॉलबैक
"रिज़ॉल्यूशन" फ़ंक्शन का उपयोग करके दिए गए स्टैश के लिए एक रैखिक आईएसए उत्पन्न करने के लिए कहा जाता है
यह एमआरओ. इसे स्टैश के लिए एक पॉइंटर के साथ बुलाया जाता है, और ए स्तर का 0. कोर हमेशा सेट होता है
स्तर जब यह आपके फ़ंक्शन को कॉल करता है तो 0 पर - पैरामीटर आपकी अनुमति देने के लिए प्रदान किया जाता है
यदि इसकी पुनरावृत्ति की आवश्यकता हो तो गहराई को ट्रैक करने के लिए कार्यान्वयन।
फ़ंक्शन को मूल वर्गों वाले क्रम में एक सरणी का संदर्भ लौटाना चाहिए।
कक्षाओं के नाम स्टैश पर "HvENAME()" को कॉल करने का परिणाम होना चाहिए। में
वे मामले जहां "HvENAME()" शून्य लौटाता है, उसके स्थान पर "HvNAME()" का उपयोग किया जाना चाहिए।
कॉल करने वाला लौटाए गए सरणी की संदर्भ संख्या को बढ़ाने के लिए ज़िम्मेदार है
संरचना बनाये रखना चाहता है. इसलिए, यदि आपने कोई अस्थायी मान बनाया है जिसे आप नहीं रखते हैं
यह सुनिश्चित करने के लिए कि इसका सही ढंग से निपटान किया गया है, "sv_2mortal()" पर सूचक। यदि आपने कैश किया है
आपका रिटर्न मान, फिर संदर्भ गणना को बदले बिना उस पर एक पॉइंटर लौटाएं।
कैशिंग
एमआरओ की गणना करना महंगा हो सकता है। कार्यान्वयन एक कैश प्रदान करता है, जिसमें आप कर सकते हैं
एक एकल "एसवी *", या कुछ भी जिसे "एसवी *" में डाला जा सकता है, जैसे "एवी *" संग्रहीत करें। पढ़ने के लिए
आपका निजी मान, मैक्रो "MRO_GET_PRIVATE_DATA()" का उपयोग करें, इसे "mro_meta" पास करें
स्टैश से संरचना, और आपकी "mro_alg" संरचना के लिए एक सूचक:
मेटा = HvMROMETA(स्टैश);
Private_sv = MRO_GET_PRIVATE_DATA(मेटा, &my_mro_alg);
अपना निजी मान सेट करने के लिए, "Perl_mro_set_private_data()" पर कॉल करें:
Perl_mro_set_private_data(aTHX_ मेटा, &c3_alg, प्राइवेट_sv);
निजी डेटा कैश लगभग उसी तरह, Private_sv के संदर्भ का स्वामित्व लेगा
वह "hv_store()" उस मान के संदर्भ का स्वामित्व लेता है जिसे आप पास करते हैं।
उदाहरण
एमआरओ कार्यान्वयन के उदाहरणों के लिए, "S_mro_get_linear_isa_c3()" और "BOOT:" देखें
की धारा एमआरओ/एमआरओ.एक्सएस, और "S_mro_get_linear_isa_dfs()" में एमआरओ.सी
लेखक
पर्ल कोर के भीतर सी3 एमआरओ और स्विचेबल एमआरओ का कार्यान्वयन किसके द्वारा लिखा गया था
ब्रैंडन एल ब्लैक. निकोलस क्लार्क ने प्लग करने योग्य इंटरफ़ेस बनाया, ब्रैंडन को दोबारा तैयार किया
इसके साथ काम करने के लिए कार्यान्वयन, और इस दस्तावेज़ को लिखा।
onworks.net सेवाओं का उपयोग करके ऑनलाइन perlmroapi का उपयोग करें