lhf's correct answer पर विस्तार, io
लाइब्रेरी को उत्पादन के उपयोग के लिए प्राथमिकता दी जाती है।
बेस लाइब्रेरी में print
फ़ंक्शन को आदिम क्षमता के रूप में कार्यान्वित किया गया है। यह त्वरित और गंदे स्क्रिप्ट्स की अनुमति देता है जो इसकी गणना पर थोड़ा नियंत्रण रखते हुए कुछ गणना करते हैं और एक उत्तर प्रिंट करते हैं। इसके सिद्धांत लाभ यह है कि यह सभी तर्कों को string
पर ले जाता है और यह प्रत्येक तर्क को आउटपुट में टैब के साथ अलग करता है और एक नई लाइन प्रदान करता है।
आउटपुट के विस्तृत नियंत्रण की आवश्यकता होने पर वे फायदे जल्दी ही दोष बन जाते हैं। इसके लिए, आपको वास्तव में io.write
का उपयोग करने की आवश्यकता है। यदि आप एक ही प्रोग्राम में print
और io.write
मिश्रण करते हैं, तो आप किसी अन्य दोष पर जा सकते हैं। print
स्पष्ट रूप से C stdout
फ़ाइल हैंडल का उपयोग करता है। इसका अर्थ यह है कि यदि आप आउटपुट फ़ाइल हैंडल को बदलने के लिए io.output
का उपयोग करते हैं, तो io.write
आपकी अपेक्षा की जाएगी लेकिन print
नहीं होगा।
io.write
के संदर्भ में print
के प्रतिस्थापन को लागू करने के लिए एक अच्छा समझौता किया जा सकता है।
local write = io.write
function print(...)
local n = select("#",...)
for i = 1,n do
local v = tostring(select(i,...))
write(v)
if i~=n then write'\t' end
end
write'\n'
end
एक बार जब आप print
के अपने स्वयं के संस्करण को लागू कर रहे हैं, तो यह हो सकता है: यह इस अपरीक्षित नमूना जहाँ मैं बेहतर लिखने के लिए स्पष्ट रूप से करने के बजाय और अभी भी "सही ढंग से" nil
तर्क को संभालने की कोशिश की है के रूप में सरल दिखाई दे सकता है अपने आवेदन के अन्य तरीकों से इसे बेहतर बनाने के लिए आकर्षक। tostring()
द्वारा प्रस्तावित अधिक प्रारूपण नियंत्रण के साथ कुछ का उपयोग करना एक अच्छा विचार है। एक और टैब चरित्र के अलावा एक विभाजक पर विचार कर रहा है।
यह * लुआ *, नहीं * LUA * है। – lhf