उदाहरण के लिए इस कोड की लाइन में मैंने लिखा है, printऔर putsअलग-अलग परिणाम उत्पन्न करता है।
1.upto(1000).each { |i| print i if i % 2 == 0 }
उदाहरण के लिए इस कोड की लाइन में मैंने लिखा है, printऔर putsअलग-अलग परिणाम उत्पन्न करता है।
1.upto(1000).each { |i| print i if i % 2 == 0 }
जवाबों:
puts प्रत्येक तर्क के अंत में एक नई पंक्ति जोड़ता है यदि कोई पहले से ही नहीं है।
print नई लाइन नहीं जोड़ता है।
उदाहरण के लिए:
puts [[1,2,3], [4,5,nil]] लौटूंगा:
1 2 3 4 5
जबकि print [[1,2,3], [4,5,nil]]
लौटेगा:
[[१,२,३], [४,५, नील]]
ध्यान रखें कि प्रिंट करते समय शून्य मान आउटपुट कैसे नहीं करता है।
यदि आप एरेज़ प्रदर्शित कर रहे हैं तो एक बड़ा अंतर है। खासकर एनआईएल वाले। उदाहरण के लिए:
print [nil, 1, 2]
देता है
[nil, 1, 2]
परंतु
puts [nil, 1, 2]
देता है
1
2
ध्यान दें, कोई दिखने वाली नील वस्तु (सिर्फ एक रिक्त रेखा) और प्रत्येक वस्तु अलग रेखा पर नहीं।
nil
printप्रत्येक तर्क को, उसके बाद $,, को $stdout, उसके बाद आउटपुट देता है $\। के बराबर हैargs.join($,) + $\
putsसेट दोनों $,और $\के लिए "\ n" और उसके बाद के रूप में एक ही बात करता है print। महत्वपूर्ण अंतर यह है कि प्रत्येक तर्क एक नई रेखा है puts।
आप उपयोगकर्ता के अनुकूल नामों केrequire 'english' साथ उन वैश्विक चर का उपयोग कर सकते हैं ।
englishlib
एपीआई डॉक्स कुछ अच्छे संकेत देते हैं:
print() → nil
print(obj, ...) → nilदिए गए ऑब्जेक्ट (ओं) को ios को लिखता है । लौटता है
nil।लेखन के लिए धारा खोलनी होगी। प्रत्येक दी गई वस्तु जो एक स्ट्रिंग नहीं है उसे इसकी
to_sविधि कहकर परिवर्तित किया जाएगा । जब तर्कों के बिना बुलाया जाता है, की सामग्री प्रिंट करता है$_।यदि आउटपुट फ़ील्ड विभाजक (
$,) नहीं हैnil, तो इसे ऑब्जेक्ट्स के बीच डाला जाता है। यदि आउटपुट रिकॉर्ड विभाजक ($\) नहीं हैnil, तो इसे आउटपुट में जोड़ा जाता है।...
puts(obj, ...) → nilदिए गए ऑब्जेक्ट (ओं) को ios को लिखता है । किसी के बाद एक नई पंक्ति लिखता है जो पहले से ही एक नए अनुक्रम के साथ समाप्त नहीं होती है। लौटता है
nil।लेखन के लिए धारा खोलनी होगी। यदि एक सरणी तर्क के साथ कहा जाता है, तो प्रत्येक तत्व को एक नई लाइन पर लिखता है। प्रत्येक दी गई वस्तु जो एक स्ट्रिंग या सरणी नहीं है, उसकी
to_sविधि को कॉल करके परिवर्तित किया जाएगा । यदि तर्कों के बिना कहा जाता है, तो एक ही नई पंक्ति आउटपुट करती है।
ऊपर दिए गए बिंदुओं के साथ थोड़ा प्रयोग करने पर, अंतर प्रतीत होता है:
कई तर्कों के साथ, printउन्हें 'आउटपुट फ़ील्ड सेपरेटर' द्वारा अलग किया जाता है $,(जो कि कुछ भी नहीं चूकता है) जबकि putsउन्हें नई सुर्खियों से अलग करता है। putsअंतिम तर्क के बाद एक नई पंक्ति भी डालता है, जबकि printऐसा नहीं करता है।
2.1.3 :001 > print 'hello', 'world'
helloworld => nil
2.1.3 :002 > puts 'hello', 'world'
hello
world
=> nil
2.1.3 :003 > $, = 'fanodd'
=> "fanodd"
2.1.3 :004 > print 'hello', 'world'
hellofanoddworld => nil
2.1.3 :005 > puts 'hello', 'world'
hello
world
=> nilputsस्वचालित रूप से अनपेक्स सरणियों, जबकि printनहीं है:
२.१.३: ००१> प्रिंट [१, [२, ३]], [४] [१, [२, ३]] [४] => नील २.१.३: ००२> पुट [१, [२, ३]], [४] 1 2 3 4 => नील
printकोई तर्क प्रिंट के साथ $_(आखिरी चीज़ जिसे पढ़ा जाता है gets), जबकि putsएक नई रेखा प्रिंट करता है:
2.1.3 :001 > gets
hello world
=> "hello world\n"
2.1.3 :002 > puts
=> nil
2.1.3 :003 > print
hello world
=> nilprintइस चर $\को putsअनदेखा करते हुए, जो भी प्रिंट करता है, उसके बाद आउटपुट रिकॉर्ड विभाजक लिखते हैं :
mark@lunchbox:~$ irb
2.1.3 :001 > $\ = 'MOOOOOOO!'
=> "MOOOOOOO!"
2.1.3 :002 > puts "Oink! Baa! Cluck! "
Oink! Baa! Cluck!
=> nil
2.1.3 :003 > print "Oink! Baa! Cluck! "
Oink! Baa! Cluck! MOOOOOOO! => nilputsto_sप्रत्येक तर्क का कॉल और प्रत्येक स्ट्रिंग में एक नई लाइन जोड़ता है, अगर यह नई लाइन के साथ समाप्त नहीं होता है।
printबस उनके द्वारा कॉल करके प्रत्येक तर्क का उत्पादन करें to_s।
उदाहरण के लिए
puts "one two"::
one two
{नई पंक्ति}
puts "one two\n":
one two
{new line} #puts परिणाम में एक नई रेखा नहीं जोड़ेगा, क्योंकि स्ट्रिंग एक नई रेखा के साथ समाप्त होती है
print "one two":
one two
print "one two\n":
one two
{नई पंक्ति}
और आउटपुट का एक और तरीका है: p
प्रत्येक ऑब्जेक्ट के लिए, सीधे obj.inspect लिखता है, उसके बाद प्रोग्राम के मानक आउटपुट के लिए एक नई लाइन।
यह डिबगिंग संदेश को आउटपुट करने में सहायक है।
p "aa\n\t":aa\n\t
यदि आप स्ट्रिंग का उपयोग करके सरणी को आउटपुट करना चाहते हैं puts, तो आपको वही परिणाम मिलेगा जैसे आप उपयोग कर रहे थे print:
puts "#{[0, 1, nil]}":
[0, 1, nil]
लेकिन अगर एक उद्धृत स्ट्रिंग के साथ नहीं तो हाँ। एकमात्र अंतर नई लाइन के बीच है जब हम उपयोग करते हैं puts।
printfबजाय उपयोग करने से putsसमान परिणाम मिलेगा, लेकिन वास्तव में ऐसा नहीं होता है। putsसंस्करण अंत में एक नई पंक्ति कहते हैं, जबकि printfएक नहीं करता है, सिर्फ मामले में जहां कोई सरणी स्ट्रिंग में अंतर्वेशित वहाँ की तरह। (निश्चित रूप से, चूंकि स्ट्रिंग शाब्दिक का मूल्यांकन करते समय प्रक्षेप होता है।)