2009-03-04 10 views
16

क्या बीच का अंतर है ...रूबी के रख-रखाव और लिखने के तरीकों के बीच क्या अंतर है?

File.open('abc', 'w') { |f| f.puts 'abcde' } 

... और ...

File.open('abc', 'w') { |f| f.write 'abcde' } 

...?

+1

@RichB (उर्फ "ओसीडी संपादन लड़का") मूल लोअरकेस "और" तकनीकी रूप से अधिक सही था। यह एक संयोजन है, न कि एक नई वाक्य की शुरुआत। – MarkusQ

+2

@ मार्कस्क्यू: रिच बी सिर्फ एक स्वचालित ट्रोलिंग बॉट है। स्पष्ट रूप से उनके व्याकरण प्रणाली को अपग्रेड करने की आवश्यकता है। – Pesto

+0

@ मार्कस्क्यू: मैं असहमत हूं। अगर आप अलग-अलग महसूस करते हैं तो इसे संपादित करें। – GEOCHET

उत्तर

29

डालता है एक नई लाइन जोड़ता है, लिखता नहीं है। तकनीकी रूप से, आउटपुट में रिकॉर्ड विभाजक (जो आम तौर पर एक नई लाइन है) जोड़ता है यदि उसके अंत में कोई नहीं है। आउटपुट केवल वही लिखें जो इसे दिया जाता है।

11

इस तरह के मामलों में, मैं हमेशा रूबी कोर प्रलेखन से शुरू करता हूं, इस मामले में IO कक्षा।

ios.puts(obj, ...) => nil 

IO#print साथ के रूप में ios को दिया वस्तुओं लिखता है। किसी भी समय के बाद एक रिकॉर्ड विभाजक (आमतौर पर एक नई लाइन) लिखता है जो पहले से ही एक न्यूलाइन अनुक्रम के साथ समाप्त नहीं होता है। यदि सरणी तर्क के साथ बुलाया जाता है, तो प्रत्येक तत्व को एक नई पंक्ति पर लिखता है। अगर तर्क के बिना बुलाया जाता है, तो एक रिकॉर्ड विभाजक आउटपुट करता है।

ios.write(string) => integer 

ios को दिया स्ट्रिंग लिखता है। स्ट्रीम लिखने के लिए खोला जाना चाहिए। यदि तर्क स्ट्रिंग नहीं है, तो इसे to_s का उपयोग करके स्ट्रिंग में परिवर्तित कर दिया जाएगा। लिखित बाइट्स की संख्या देता है।

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