আমি কীভাবে রেলগুলিতে রুবিতে লাইন বিরতি ছাড়াই কনসোলে "পুটস" ব্যবহার করতে পারি?


156

আমার একটি পদ্ধতি রয়েছে যা লুপের মধ্য দিয়ে যায় - আমি এটি একটি "আউটপুট" করতে চাই। " প্রতিটি লুপ যাতে আমি এটি কনসোলে দেখতে পারি। যাইহোক, আমি যখন ব্যবহার করি তখন এটি প্রতিটিের শেষে একটি লাইন ব্রেক করে puts "."

যদি কোনও উপায় থাকে যাতে এটি কেবল একটি অবিচ্ছিন্ন রেখা থাকে?

উত্তর:


199

আপনি পুটের পরিবর্তে মুদ্রণ ব্যবহার করতে হবে। এছাড়াও, আপনি যদি বিন্দুগুলি মসৃণভাবে প্রদর্শিত হতে চান তবে প্রতিটি প্রিন্টের পরে আপনাকে স্টডআউট বাফারটি ফ্লাশ করতে হবে ...

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

100.times do
  print_and_flush "."
  sleep 1
end

সম্পাদনা: আমি @ রুবিপ্রিন্সের মন্তব্যের জবাব দেওয়ার জন্য ফ্লাশের পিছনে যুক্তিটি সন্ধান করছিলাম এবং বুঝতে পেরেছিলাম যে এটি ব্যবহার করে কিছুটা পরিষ্কার করা যায় $stdout.sync = true...

$stdout.sync = true

100.times do
  print "."
  sleep 1
end

3
হয় $stdout.flush? সত্যিই প্রয়োজন .. আমি রুবি 1.8.7 ব্যবহার করছি এবং আমি শুধু সঙ্গে কাজ করেছে printএবং আমি কোন সমস্যা ছিল ..
rubyprince

6
আপনি যদি কোনও অগ্রগতি বারের মতো কিছু করেন তবে এটি কার্যকর। যখন আপনি কেবল printনিজের দ্বারা ব্যবহার করেন , এটি ব্লকগুলিতে বেরিয়ে আসতে পারে কারণ সরাসরি তা লেখার পরিবর্তে এটি বাফারে সংরক্ষণ করা যেতে পারে (ঠিক কেন জানি না)। এটি ওএস নির্দিষ্টও হতে পারে।
idlefingers

2
আমি @ stdout.flush দিয়ে চেষ্টা করেছিলাম ... পরিবর্তে। Sync = সত্য ব্যবহার করে কোনও সুবিধা?
টিমোথি টি।

আমি মনে করি stdout এ সেট syncকরা একটি স্ট্রিং আউটপুট করার ওভারকিল। তারপরে আপনি যদি অ্যাপ্লিকেশনটিকে প্রচুর আউটপুট দেয় তবে এটি ধীর হবে।
akostadinov
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.