मैं रेल पर रूबी में एक लाइन ब्रेक के बिना कंसोल के लिए "पुट्स" का उपयोग कैसे कर सकता हूं?


156

मेरे पास एक विधि है जो लूप से गुजरती है - मैं चाहता हूं कि यह एक "आउटपुट" हो। प्रत्येक लूप ताकि मैं इसे कंसोल में देख सकूं। हालाँकि, जब मैं उपयोग करता हूं तो यह प्रत्येक के अंत में एक लाइनब्रेक डालता है puts "."

अगर वहाँ एक रास्ता है ताकि यह सिर्फ एक सतत रेखा है?

जवाबों:


199

आपको पुट के बजाय प्रिंट का उपयोग करने की आवश्यकता है। इसके अलावा, यदि आप चाहते हैं कि डॉट्स आसानी से दिखाई दें, तो आपको प्रत्येक प्रिंट के बाद स्टडआउट बफर को फ्लश करना होगा ...

def print_and_flush(str)
  print str
  $stdout.flush
end

100.times do
  print_and_flush "."
  sleep 1
end

संपादित करें: मैं बस @ rubyprince की टिप्पणी का जवाब देने के लिए फ्लश के पीछे तर्क में देख रहा था, और यह महसूस किया कि इसे बस उपयोग करके थोड़ा साफ किया जा सकता है $stdout.sync = true...

$stdout.sync = true

100.times do
  print "."
  sleep 1
end

3
क्या $stdout.flushवास्तव में जरूरत है? .. मैं रूबी 1.8.7 का उपयोग कर रहा हूं और मैंने सिर्फ चीजों के साथ किया है printऔर मुझे कोई समस्या नहीं है ..
rubyprince

6
यदि आप किसी प्रगति पट्टी की तरह कुछ कर रहे हैं तो यह उपयोगी है। जब आप बस printस्वयं का उपयोग करते हैं , तो यह ब्लॉकों में बाहर आ सकता है क्योंकि इसे सीधे लिखे जाने के बजाय बफर में संग्रहीत किया जा सकता है (मुझे ठीक से पता नहीं क्यों)। यह ओएस विशिष्ट भी हो सकता है।
आइडलफिंगर

2
मैंने इसे @ stdout.flush के साथ आज़माया ... उपयोग के साथ कोई लाभ।
टिमोथी टी।

मुझे लगता है कि syncएक स्ट्रिंग को आउटपुट के लिए एक ओवरकिल स्थापित करना है। फिर अगर आप ऐप को आउटपुट करते हैं तो यह धीमा हो जाएगा।
अकोस्टैडिनोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.