2001 से एक बहुत ही रोचक post में एलन विर्फ-ब्रॉक बताता है कि (मूल) ढेर को सुधार किए बिना ब्लॉक बंद करने को कैसे कार्यान्वित किया जाए।क्यों कुछ ब्लॉक बंद ऑप्टिमाइज़ेशन अच्छा और मान्य है?
कई विचारों से वह खुलासा करता है कि मैं समझ में नहीं आता हूं और मैंने सोचा कि यह यहां पूछना अच्छा विचार होगा। वह कहता है:
कोई भी चर जो किसी ब्लॉक के जीवनकाल (उदाहरण के लिए, विधियों और ब्लॉक को बंद करने के तर्क) के दौरान कभी भी असाइन नहीं किया जा सकता है, अगर पर्यावरण में एक चर की बंद हो जाती है तो उसे पर्यावरण में नहीं रखा जाना चाहिए जब यह
बनाई गई है दो चीजें मुझे यकीन है कि मैं काफी अच्छी तरह से समझ में नहीं कर रहा हूँ कर रहे हैं:
- क्यों केवल पढ़ने के लिए चर की दो प्रतियां चर होने की तुलना में तेजी वातावरण में ले जाया गया है का उपयोग कर? क्या ऐसा इसलिए है क्योंकि संलग्नक संदर्भ के लिए यह ढेर में (मूल) चर का उपयोग करने के लिए तेज़ होगा?
- हम कैसे सुनिश्चित कर सकते हैं कि दो चर सिंक्रनाइज़ रहते हैं?
प्रश्न 1 में एक और कारण होना चाहिए। अन्यथा मुझे लाभ दिखाई नहीं देता है (जब अनुकूलन को लागू करने की लागत की तुलना में।)
प्रश्न 2 के लिए एक गैर तर्क जो विधि में असाइन किया गया है और ब्लॉक में नहीं। स्टैक में संग्रहीत ओओपी ब्लॉक के जीवन के दौरान अपरिवर्तित क्यों रहेगा?
मुझे लगता है कि मुझे प्रश्न 2 का जवाब पता है: क्योंकि ब्लॉक के निष्पादन को विधि के निष्पादन के साथ अंतःस्थापित नहीं किया जा सकता है, यानी, जबकि ब्लॉक रहता है, संलग्न संदर्भ नहीं चलता है। लेकिन ब्लॉक जीवित होने पर अस्थायी रूप से अस्थायी रूप से संशोधित करने का कोई तरीका नहीं है?
दिलचस्प बात यह है कि क्लीमेंट बेरा सिर्फ बंद होने के बारे में ब्लॉग किया गया है, ऐसा लगता है कि आप एक ही फोकस साझा करते हैं https://clementbera.wordpress.com/2015/01/21/context-and-blockclosure-implementation/ –
लिंक के लिए धन्यवाद। यह एक बहुत स्पष्ट प्रदर्शनी है। (चयनकर्ता में एक टाइपो है हालांकि, इसे ज़ूकीपर पढ़ना चाहिए था ** ** मुफ्त ** AllAnimals ;-) –