Як я можу використовувати «путівки» до консолі без розриву лінії в рубіні на рейках?


156

У мене є метод, який проходить через цикл - я хочу, щоб він вивів "". кожен цикл, щоб я міг бачити його в консолі. однак, вона використовує рядок рядків у кінці кожного, коли я використовуюputs "." .

Якщо є спосіб, щоб він просто мав суцільну лінію?

Відповіді:


199

Потрібно використовувати друк, а не прошивки. Крім того, якщо ви хочете, щоб точки плавно відображалися, вам потрібно промивати буфер stdout після кожного друку ...

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? Дійсно потрібен .. Я використовую Ruby , 1.8.7 і я робив речі тільки з printі у мене не було ніяких проблем ..
rubyprince

6
Це корисно, якщо ви робите щось на зразок планки прогресу. Коли ви просто використовуєте printйого, він може виходити блоками, оскільки його можна зберігати в буфері, а не писати відразу (я точно не знаю, чому). Це може бути і специфічно для ОС.
недіючі пальці

2
Я спробував це з @ stdout.flush ... будь-які переваги з використанням .sync = true замість цього?
Тимофій Т.

Я думаю, що встановлення stdout to syncє надмірним вмістом для виведення однієї рядка. Тоді, якщо ви додаєте багато програм, це буде повільніше.
акостадінов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.