मैं कोडा आईपैड ऐप के साथ काम कर रहा हूं और लुआ सीख रहा हूं। कोडा कक्षाओं के लिए Class.lua का उपयोग करता है। जो मैं प्राप्त करने की कोशिश कर रहा हूं वह एक चर के लिए कार्यों को निर्दिष्ट करने और विधियों को सेट करने का एक तरीका है। वर्तमान में, एक वैरिएबल का कहना है कि "एक्स" को एक्सेस किया जा सकता है: प्रिंट (obj.x) और इस तरह के कोड के साथ सेट करें: obj.x = 1. मैं वैरिएबल के लिए एक गेट और सेट फ़ंक्शन को कॉल करना चाहता हूं जिसे मैं निर्दिष्ट कर सकता हूं । मैं एक्शनस्क्रिप्ट 3 में लिखे गए कुछ को पोर्ट कर रहा हूं और ए 3 की नकल करने और फ़ंक्शन घोषणाओं को सेट करने की आवश्यकता है। अगर यह संभव है या अगर उनका दूसरा तरीका है तो मुझे बताएं। मैं कोडेरा क्लास को ओवरराइड कर सकता हूं। अगर इसका कोड जोड़ना या बदलना एक समाधान है। धन्यवाद।लुआ गेटर्स और सेटर्स
उत्तर
आप अपनी कक्षा में __newindex और __index विधियों को ओवरराइड करके कस्टम सेटर और गेटटर बना सकते हैं।
ध्यान दें कि आपको कोडा का हिस्सा है, जो कोडा का हिस्सा है, कच्चेसेट और कच्चे तरीके को सक्षम करने के लिए (उन्हें लाइनों को नील करने के लिए लाइनों पर टिप्पणी करें) को संशोधित करना होगा। संपादित करें: यह अब कोडा के नवीनतम संस्करण, rawset
और rawget
डिफ़ॉल्ट रूप से उपलब्ध नहीं है।
जब भी आप उस तालिका पर कोई संपत्ति सेट करने का प्रयास करते हैं तो __newindex विधि को कॉल किया जाता है जो पहले सेट नहीं किया गया था।
जब भी आप ऐसी संपत्ति प्राप्त करने का प्रयास करते हैं तो __index विधि को कॉल किया जाता है जो तालिका में मौजूद नहीं है।
तो आप अपनी कक्षा में एक निजी टेबल बनाकर और अपने सदस्य चर को संग्रहीत करके गेटर्स और सेटर्स के लिए कस्टम कोड डाल सकते हैं। जब आप उन्हें पढ़ने और लिखने का प्रयास करते हैं, तो आप अपने __newindex और __index विधियों में कस्टम कोड निष्पादित कर सकते हैं।
MyClass = Class()
function MyClass:init()
-- We'll store members in an internal table
self.members = {}
end
function MyClass:__newindex(index, value)
if index == "testMember" then
self.members[index] = value
print("Set member " .. index .. " to " .. value)
else
rawset(self, index, value)
end
end
function MyClass:__index(index)
if index == "testMember" then
print("Getting " .. index)
return self.members[index]
else
return rawget(self, index)
end
end
यह
function setup()
foo = MyClass()
foo.testMember = 5
foo.testMember = 2
print(foo.testMember)
end
आप यहाँ metamethods बारे में अधिक जानकारी प्राप्त कर सकते हैं परीक्षण करने के लिए: http://lua-users.org/wiki/MetamethodsTutorial
http://nova-fusion.com/2011/04/04/implementing-proper- gettersetters-in-lua/वह केवल एक google दूर था ... – PeterMmm
मैंने उपरोक्त लिंक को कई बार देखा है। मैंने यह भी सोचा कि यह समाधान था, लेकिन मैं यह नहीं समझ पाया कि मैं एक विशेष चर के कार्यों को प्राप्त करने और सेट करने के तरीके को कैसे निर्दिष्ट करूंगा। – Spencer