जैसा कि सभी जानते हैं, लुआ में ऐसी कोई कक्षाएं और वस्तुएं नहीं हैं। हालांकि, मेटाटैबल्स और सिंटैक्टिक शुगर हैं।
इन तंत्रों का उपयोग करते हुए, यह वर्ग समानता को लागू करने के लिए पर्याप्त सरल है।
परिणाम कुछ इस प्रकार है:
यह सब निश्चित रूप से अच्छा है, यहां तक कि एक निश्चित निपुणता के साथ, विरासत का एहसास किया जा सकता है ...
लेकिन सार्वजनिक और निजी वर्ग के सदस्य कहाँ हैं? वास्तव में, इस उदाहरण में वे सभी सार्वजनिक हैं। हां, और हमें याद रखना चाहिए कि कोलन का उपयोग कहां करना है:
MyClass:myFunc()
और जहां सिर्फ एक बिंदु है:
MyClass.myOtherFunc()
और वर्ग के स्थिर सदस्य? वास्तव में मना करना है?
इसलिए मैं मना नहीं करना चाहता था, और सामूहिक खेती करने लगा ...
इसलिए, मैं आपको अपने सामूहिक खेत में प्रस्तुत करता हूं:
मेरा सामूहिक खेत createClass = function() local creator = {} creator.__private = { object_class = {}, } creator.__oncall = function(class_creator)
और इसका उपयोग कैसे करें? बहुत सरल है, यहाँ आपके लिए एक टेम्प्लेट है:
myclass_prototype = function() local this = {} this.__public_static = {
जैसा कि आप देख सकते हैं, हर बार जब आप कक्षा के अंदर से कॉल करते हैं, तो आपको हर बार पथ निर्दिष्ट करना होगा, लेकिन ".__ Private.privdata" के लिए, लेकिन यहां बनाई गई कक्षा का उपयोग करने का एक उदाहरण है!
myobject = myclass() myobject.pubfunc(999)
जब यह कोड कहा जाता है, तो मायक्लास क्लास से myobject ऑब्जेक्ट बनाया जाएगा, और pubfunc फ़ंक्शन को बुलाया जाएगा, जो सार्वजनिक चर की सामग्री को उजागर करेगा और निजी को बदल देगा।
और कोलोन के साथ कोई परेशानी नहीं!
वैसे, स्टैटिक कॉल्स भी काम करती हैं। दोनों वर्ग से और वस्तु से।
इसलिए, मैं आपको संक्षेप में बताऊंगा कि यहां किस तरह का जादू होता है। और तथाकथित उत्थानों के साथ यहाँ बाजीगरी है। upvalues वैरिएबल होते हैं जो अंदर से तो दिखाई देते हैं, लेकिन बाहर से नहीं! बहुत निजी के समान, है ना?
इसलिए, "प्रोटोटाइप" फ़ंक्शन बनाने के बाद, हमने एक नया स्कोप बनाया, और हमने अपनी क्लास के सभी अंदरूनी हिस्सों को इसमें रखा, केवल क्लास के पब्लिक और पब्लिक स्टैटिक सदस्यों को बाहर निकाला। और बाकी का जादू मेटाटैबल्स द्वारा किया जाता है जो आपको यह निर्धारित करने की अनुमति देता है कि जब आप हमारी कक्षा / वस्तु का प्रतिनिधित्व करते हैं तो बाहरी तालिका के "गैर-प्रासंगिक" सदस्य से अनुरोध करने पर वास्तव में क्या होगा।
अराजक लगता है, मुझे पता है, लेकिन मैं बेहतर नहीं समझा सकता हूँ - विशेष नहीं :)
मैंने लंबे समय से सोचा था कि इस तरह की प्रणाली के साथ विरासत कैसे बनाई जाए, लेकिन मैं इसके साथ कभी नहीं आया - upvalues गंभीरता से हमारे कार्यों को प्रतिबंधित करता है, और मैं डिबग लाइब्रेरी जैसे विकृतियों का उपयोग नहीं करना चाहता हूं - यह हमेशा शामिल नहीं है। अगर कोई ऐसा सोचता है, तो मुझे खुशी होगी!
पुनश्च: अगर किसी के लिए मेरी पोस्ट कुछ स्पष्ट है - ठीक है, तो मैंने खुद को बहुत कम आंका है :) कड़ाई से न्याय न करें, शायद किसी कारण से यह समाधान काम आएगा!