2011-08-22 13 views
24

पास्कल में, मेरे पास write और writeln है। स्पष्ट रूप से लुआ का print पास्कल के writeln के समान है। क्या हमारे पास पास्कल के write जैसा कुछ है? लगातार प्रिंट कमांड कैसे अपना आउटपुट उसी लाइन पर भेज सकते हैं?उसी लाइन पर लूआ प्रिंट

print("Hello") 
print("World") 

आउटपुट:

Hello 
world 

मैं इस करना चाहते हैं:

Hello world 
+10

यह * लुआ *, नहीं * LUA * है। – lhf

उत्तर

50

उपयोग io.write बजाय print है, जो, वैसे भी सरल का उपयोग करता है, डिबगिंग तरह के लिए है।

+1

यह सबसे छोटा सही उत्तर है। – AlexStack

+3

अच्छी तरह से, यही कारण है कि @ एलएचएफ लुआ भाषा के रचनाकारों में से एक है। :) – felipsmartins

4

एक विकल्प के रूप, बस अपने स्ट्रिंग का निर्माण तो यह लिखने के लिए एक एकल print

साथ आप हमेशा io पुस्तकालय के लिए पहुँच नहीं कर सकते हैं।

+0

यदि आपके पास 'io' लाइब्रेरी तक पहुंच नहीं है, तो आपको' print' तक पहुंच क्यों होगी? –

+2

क्योंकि आप एक एम्बेडेड वातावरण में हो सकते हैं, या कुछ अन्य प्रतिबंधित वातावरण जो 'प्रिंट' को फिर से परिभाषित करते हैं। उदाहरण के लिए Warcraft की दुनिया। – sylvanaar

16

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() द्वारा प्रस्तावित अधिक प्रारूपण नियंत्रण के साथ कुछ का उपयोग करना एक अच्छा विचार है। एक और टैब चरित्र के अलावा एक विभाजक पर विचार कर रहा है।

+3

इसे एक तालिका बनाने की लागत पर 'फ़ंक्शन प्रिंट (...) io.write (table.concat ({...}, "\ t"), "\ n") end' के रूप में भी लिखा जा सकता है। एक concatenation प्रदर्शन। – lhf

+2

लेकिन केवल तभी जब सभी तर्क स्ट्रिंग या नंबर हैं ['table.concat'] (http://www.lua.org/source/5.1/ltablib.c.html#tconcat) प्रत्येक तत्व पर' lua_isstring() 'को कॉल करते हैं तालिका का ... आधार पुस्तकालय 'प्रिंट' की तुलना में जो प्रत्येक पैरामीटर पर' tostring' को कॉल करता है। – RBerteig

+1

हाँ, आप सही हैं! – lhf

-4

आप प्रिंट उपयोग करना चाहते हैं तो आप इस

प्रिंट ("हैलो दुनिया")

सब कुछ inbetween quotients

3

आप "हैलो" के लिए चर का उपयोग कर सकता है मुद्रित हो जाएगी करना होगा और "विश्व"। फिर बाद में उन्हें संयोजित करें। इस तरह:

local h = "Hello" 
local w = "World" 

print(h..w) 

यह इस मामले में "हैलोवर्ल्ड" के रूप में प्रदर्शित होगा।लेकिन यह ठीक करना आसान है। उम्मीद है कि यह मदद की!

0

समस्या मैं प्रिंट से अधिक io.write उपयोग करने के साथ लगता है आप उदाहरण

के लिए io.write की अपनी लाइन के अंत में डाल करने के लिए "\ n" है तो जब अवसर पर आप वास्तव में एक नई लाइन का निर्माण करना चाहते है
io.write "hello \n" 
io.write "world \n" 

कुछ मैं पता लगा लेकिन मैं सिर्फ लुआ सीखने शुरू कर दिया है और यह मेरे लिए एक अच्छा सवाल है, वहाँ io.write ऐसा करने के लिए, लेकिन एक नई लाइन के लिए अंत में \ n का उपयोग नहीं एक आसान तरीका है? मुझे प्रिंट पर io.write पर प्रिंट का उपयोग करने से मुझे अंकगणित, चर आदि के साथ कुछ परेशानी होती है ... जब मैं उन्हें उसी पंक्ति पर प्रिंट करने के बाद जोड़ता हूं तो मैं io.write का उपयोग करना पसंद करता हूं लेकिन \ n अतिरिक्त कोड जोड़ता है।

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