Ruby on Railsで改行せずにコンソールに「プット」を使用するにはどうすればよいですか?


156

私はループを通過するメソッドを持っています-「。」を出力したいです。各ループは、コンソールで確認できます。ただし、を使用すると、それぞれの終わりに改行が挿入されますputs "."

それがちょうど連続線を持つように方法があるなら?

回答:


199

putの代わりにprintを使用する必要があります。また、ドットをスムーズに表示したい場合は、印刷するたびにstdoutバッファーをフラッシュする必要があります...

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

100.times do
  print_and_flush "."
  sleep 1
end

編集:私は@rubyprinceのコメントに答えるためにflushの背後にある理由を調べていたところ、これを単に使用することで少しクリーンアップできることに気付きました$stdout.sync = true...

$stdout.sync = true

100.times do
  print "."
  sleep 1
end

3
される$stdout.flush?本当に必要..私は、Ruby 1.8.7を使用していると私はちょうどで物事を行っているprint...と私は何の問題もなかった
rubyprince

6
プログレスバーなどを実行している場合に便利です。print単独で使用すると、すぐに書き込まれるのではなくバッファーに格納できるため、ブロックで出力される可能性があります(理由は正確にはわかりません)。OS固有の場合もあります。
アイドルフィンガー

2
私は@ stdout.flushで試してみました...代わりに.sync = trueを使用するメリットはありますか?
ティモシーT.

stdoutをに設定することsyncは、1つの文字列を出力するのはやり過ぎだと思います。次に、アプリが大量に出力する場合は遅くなります。
akostadinov 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.