लुआ जादुई रूप से मूल तर्कों को नए मूल्य नहीं दे सकता है। अनुकूलन के आधार पर वे अब भी ढेर पर नहीं हो सकते हैं। इसके अलावा, कोई संकेत नहीं है कि कोड कब उत्पन्न हुआ था, इसलिए यह अब उन तर्कों को देखने में सक्षम नहीं हो सकता है। उदाहरण के लिए, यदि कोरआउट को फ़ंक्शन कहा जाता है, तो वह नया फ़ंक्शन पुराने में दिए गए तर्कों को नहीं देख सकता है।
coroutine.yield()
resume
कॉल पर जारी किए गए तर्क लौटाते हैं जो कोरआउटिन जारी रखते हैं, ताकि उपज कॉल की साइट पैरामीटर को संभाल सके क्योंकि यह चाहती है। यह कोड को उपज करने वाले विशिष्ट कोड के साथ संवाद करने के लिए फिर से शुरू करने की अनुमति देता है। yield()
resume
से वापसी मान के रूप में अपने तर्कों को पास करता है, और resume
अपने तर्कों को yield
पर वापसी मान के रूप में पास करता है। यह संचार का मार्ग स्थापित करता है।
आप इसे किसी अन्य तरीके से नहीं कर सकते हैं। निश्चित रूप से उन तर्कों को संशोधित करके नहीं जो yield
साइट से दिखाई नहीं दे सकते हैं। यह सरल, सुरुचिपूर्ण है, और समझ में आता है।
इसके अलावा, इसे किसी के मूल्य पर पोकिंग करने के लिए अत्यधिक कठोर माना जाता है। विशेष रूप से एक समारोह पहले से ही ऑपरेशन में। याद रखें: तर्क केवल मूल्यों से भरे स्थानीय चर हैं। उपयोगकर्ता को उन चरों की सामग्री को तब तक बदलने की उम्मीद नहीं करनी चाहिए जब तक कि यह स्वयं को परिवर्तित न करे। वे local
चर के बाद, सभी हैं। उन्हें केवल स्थानीय रूप से बदला जा सकता है; इसके कारण नाम।
स्रोत
2012-11-16 21:19:20
मुझे लगता है कि यह सवाल का जवाब नहीं देता है।ओपी/सी एपीआई/फंक्शंस lua_resume() और lua_yield() के बारे में था, जिसमें मानक लाइब्रेरी 'coroutine.resume()' आदि से भिन्न अर्थशास्त्र है (उदाहरण के लिए, lua_resume तीन तर्क लेता है - उनमें से दो lua_State हैं ...) – BadZen
मुझे लगता है कि यह पैरामीटर पास करने के उद्देश्य के बारे में सवाल का जवाब देता है और एक उदाहरण प्रदान करता है जो लुआ दुभाषिया होने का प्रयास करना आसान है। वास्तव में, ओपी ने निकोल के जवाब के तहत अपनी टिप्पणी में उतना ही कहा। यदि आपको लगता है कि आपके पास बेहतर है तो आप हमेशा अपना जवाब दे सकते हैं। –
libs में coroutine ऑब्जेक्ट के बीच एक बड़ा अंतर है (उदाहरण के लिए lua_State encapsulates) और सी एपीआई का उपयोग करना। मेरे पास कोई बेहतर जवाब नहीं है, इसलिए मैंने विशेष रूप से सी एपीआई के बारे में पूछने के लिए एक और सवाल खोला। निकोल का जवाब और आपका यहां दोनों कोरआउट लाइब्रेरी ऑब्जेक्ट के बारे में बात करते हैं। कोड की लगभग 100 पंक्तियां हैं जो lua_ * API के संदर्भ में लागू होती हैं। यह स्पष्ट नहीं है, और दस्तावेज़ीकरण विस्तार से कम है। – BadZen