क्या लुआ में कोई कॉन्स कीवर्ड है? या कोई अन्य समान बात? क्योंकि मैं अपने चर को कॉन्स्ट के रूप में परिभाषित करना चाहता हूं और चर के मान को बदलने से रोकना चाहता हूं। अग्रिम धन्यवाद।क्या कोई ऐसा कीवर्ड है जैसे कॉन्स या कुछ और जो लुआ में इसके साथ एक ही काम करता है?
उत्तर
लुआ स्वचालित रूप से समर्थन स्थिरांक नहीं है, लेकिन आप उस कार्यक्षमता को जोड़ सकते हैं। उदाहरण के लिए अपने स्थिरांक को एक टेबल में डालकर, और तालिका को केवल मेटाटेबल का उपयोग करके पढ़ना।
तरीके से ऐसा करने के लिए है: http://andrejs-cainikovs.blogspot.se/2009/05/lua-constants.html
उलझन है कि आपके स्थिरांक के नाम केवल "ए" और "बी", लेकिन "CONSTANTS.A" और "CONSTANTS.B की तरह कुछ नहीं होगा "। आप अपने सभी स्थिरांक को एक तालिका में डालने का निर्णय ले सकते हैं, या उन्हें कई तालिकाओं में तर्कसंगत रूप से समूहित करने का निर्णय ले सकते हैं; उदाहरण के लिए गणित स्थिरांक आदि के लिए "MATH.E" और "MATH.PI"
लुआ या इसी तरह के निर्माण में कोई const
कीवर्ड नहीं है।
सबसे आसान समाधान एक टिप्पणी में एक बड़ी सावधानी लिखने के लिए, कह रही है कि यह इस चर करने के लिए लिखने के लिए मना किया है है ...
हालांकि यह तकनीकी रूप से संभव एक वैश्विक लिए लिख (या पढ़ने) ना करे के लिए है लूआ 5.2 में वैश्विक पर्यावरण _G
(या _ENV
) के लिए एक मेटाटेबल प्रदान करके परिवर्तनीय।
कुछ इस तरह:
local readonly_vars = { foo=1, bar=1, baz=1 }
setmetatable(_G, {__newindex=function(t, k, v)
assert(not readonly_vars[k], 'read only variable!')
rawset(t, k, v)
end})
तो अगर आप foo
के लिए कुछ आवंटित करने के लिए प्रयास करते हैं, एक त्रुटि फेंक दिया है।
यह कोड गलत है। यह नए चर सेट करने के खिलाफ सुरक्षा करेगा, लेकिन उन्हें बदल नहीं रहा है। – ZzZombo
जैसा कि पहले से ही देखा गया है, लुआ में const
नहीं है।
local protected = {}
function protect(key, value)
if _G[key] then
protected[key] = _G[key]
_G[key] = nil
else
protected[key] = value
end
end
local meta = {
__index = protected,
__newindex = function(tbl, key, value)
if protected[key] then
error("attempting to overwrite constant " .. tostring(key) .. " to " .. tostring(value), 2)
end
rawset(tbl, key, value)
end
}
setmetatable(_G, meta)
-- sample usage
GLOBAL_A = 10
protect("GLOBAL_A")
GLOBAL_A = 5
print(GLOBAL_A)
भी http://lua-users.org/wiki/ReadOnlyTables देखें:
आप रक्षित 'विश्व स्तर पर निर्धारित वेरिएबल (संरक्षित तालिकाओं की तुलना में) करने के लिए इस छोटे से तरीके का उपयोग कर सकते हैं। और ध्यान दें कि आप ग्लोबल स्थिरांक (प्रदर्शन में कुछ लागत पर) अनुकरण करने के लिए केवल पढ़ने के लिए '_ENV' और/या '_G' सेट कर सकते हैं। – finnw
यह @finnw द्वारा पोस्ट किए गए लिंक से एक बहुत ही महत्वपूर्ण नोट जैसा लगता है:" इसके अलावा, केवल पढ़ने योग्य टेबल बनाने की यह विधि ** जोड़े, आईपीएयर, अगली, # ऑपरेटर **, और तालिका पुनरावृत्ति के अन्य रूपों में हस्तक्षेप करती है। " – chris