2011-01-17 6 views
13

डी में (एक पैरामीटर के लिए) "गुंजाइश"

void foo(scope void* p) { } 

क्या करता scope का अर्थ क्या मतलब है?

(। मैं के बारे में scope(exit) या scope int x = 5;, लेकिन के बारे में scope के रूप में एक पैरामीटर सूची के अंदर इस्तेमाल में बात नहीं कर रहा हूँ)

उत्तर

22

वहाँ डी

  1. scope बयान में scope के लिए 3 उपयोग हैं। यह तब होता है जब आप scope(success), scope(failure), या scope(exit) का उपयोग करते हैं। scope कथन को छोड़ने के दायरे से बाहर निकलने पर दिए गए ब्लॉक में बयान चलाए जाते हैं, यदि कोई अपवाद फेंक दिया गया है, या इस पर ध्यान दिए बिना कि सफलता, विफलता और बाहर निकलने के लिए अपवाद फेंक दिया गया है या नहीं। scope का यह उपयोग भाषा में रह रहा है।

  2. scope स्थानीय चर पर। यह चर को ढेर पर रखता है - भले ही यह कक्षा हो। जब यह गुंजाइश छोड़ देता है तो ऑब्जेक्ट नष्ट हो जाता है। scope का यह उपयोग असुरक्षित है और अंततः भाषा से हटा दिया जाएगा (हालांकि std.typecons.scoped उन लोगों के लिए प्रतिस्थापित करता है जो खतरनाक रूप से जीवन जीना चाहते हैं)।

  3. scope फ़ंक्शन पैरामीटर पर (जो उपयोग केस है जिसके बारे में आप पूछ रहे हैं)। जब एक प्रतिनिधि पर पैरामीटर पर रखा जाता है, तो इसका मतलब है कि उस पैरामीटर के संदर्भ बच नहीं सकते हैं (यानी एक वैश्विक चर को असाइन किया गया है)। और जब संकलक इसे प्रतिनिधियों पर देखता है, तो स्थानीय फ़ंक्शन का पता लेते समय यह बंद होने से बचने से बच जाएगा। यह opApply लूप (reference post on newsgroup) में आवश्यक है। वर्तमान में, scope का प्रतिनिधि प्रतिनिधियों के अलावा किसी भी फ़ंक्शन पैरामीटर पर कोई प्रभाव नहीं पड़ता है और अन्य सभी प्रकारों के लिए अनदेखा किया जाता है, हालांकि भविष्य में किसी बिंदु पर इसे पॉइंटर्स जैसे कार्यों को प्रभावित करने के लिए विस्तारित किया जा सकता है ताकि उन्हें कार्य से बचने से रोका जा सके।

जब एक समारोह पैरामीटर पर इस्तेमाल किया, in कीवर्ड const scope के लिए एक उपनाम है, जो अक्सर है कैसे scope समारोह मापदंडों पर अनजाने में इस्तेमाल किया जाता है है।

+1

मैं # 3 की तलाश में था ... यह आश्चर्यजनक है! मैंने हमेशा सोचा कि यह कैसे करना है, धन्यवाद! :) – Mehrdad

+0

@ लैम्बर्ट: ऐसा लगता है कि यह डी वेबसाइट पर दस्तावेज नहीं था, लेकिन मैंने एक रिपोर्ट जारी की है, इसलिए यह जल्द ही दस्तावेज़ीकरण में जोड़ा जाएगा। –

+0

@Andrej: कूल, धन्यवाद! :) – Mehrdad

0

डिजिटल मंगल समाचार समूह पर सर्च कर रहे हैं, मुझे लगता है कि संदर्भ में क्षेत्र के बारे में दो अर्द्ध संबंधित पोस्ट पाया: here और here

उन दो पोस्ट पढ़ने से, फ़ंक्शन पैरामीटर स्कोप कुछ भी उपयोगी नहीं लगता है और यह पीछे की संगतता के लिए है। यह बाद के संस्करणों की तरह लगता है कि डी 2 के बाद क्वालीफायर पूरी तरह से हटा दिया जा सकता है।

संबंधित मुद्दे