2016-04-24 3 views

उत्तर

5

लुआ में एक मॉड्यूल एक ऐसा ऑब्जेक्ट है जो कई सार्वजनिक कार्यों को निर्यात करता है। लुआ में एक मॉड्यूल को परिभाषित करने के दो तरीके हैं।

module(..., package.seeall) 

Audio = {} 

function Audio:play() 
    print("play") 
end 

या वैकल्पिक रूप से: उदाहरण के लिए

Audio = {} 

function Audio:play() 
    print("play") 
end 

return Audio 

पूर्व एक मॉड्यूल को परिभाषित करने के पुराने तरीका है, लेकिन यह अभी भी कई उदाहरण में पाया जा सकता है। उत्तरार्द्ध अब मॉड्यूल को परिभाषित करने का पसंदीदा तरीका है।

इसलिए, जब तक कि आप एक स्थानीय चर के लिए एक मॉड्यूल असाइन नहीं करते हैं, इसके निर्यात किए गए चर और विधियों को संदर्भित करने का कोई तरीका नहीं है।

यदि audio ने किसी भी वैश्विक कार्य को परिभाषित किया था, तो यह कार्य audio आयात होने पर उपलब्ध होगा। वैश्विक कार्य और चर वैश्विक वस्तु से जुड़े हुए हैं। लुआ में _G नामक एक चर है जिसमें सभी वैश्विक चर और परिभाषित कार्य शामिल हैं। उदाहरण के लिए,

audio.lua

function play() 
    print("play") 
end 

main.lua लिए

require("audio") 

play() 

या

require("audio") 

_G.play() 

काम करता है यही कारण है, लेकिन वैश्विक वस्तु में सब कुछ डाल दिया है कई असुविधा रों। चर और कार्यों को ओवरराइट किया जा सकता है। आखिर में वैश्विक वस्तु बन जाती है और फूला हुआ होता है। मॉड्यूल में सब कुछ संरचना करना बेहतर है, इसलिए चर और विधियां अपने नामस्थान में encapsulated हैं।

+4

'स्थानीय ऑडियो = {}' का उपयोग करना आम है और क्लाइंट को यह तय करने दें कि इसे वैश्विक के रूप में सहेजना है या नहीं। – lhf

+0

इसलिए मुख्य कारण वैश्विक नामस्थान को आयातित आयातित फ़ाइल को रोकने के लिए है। और मुझे लगता है कि एक और लाभ नाम विवादों से परहेज कर रहा है। – Timmmm

संबंधित मुद्दे