如何在控制台上使用“ puts”而不将红宝石换行?


156

我有一个遍历循环的方法-我希望它输出一个“”。每个循环,这样我就可以在控制台中看到它。但是,当我使用时,会在每个末尾放置一个换行符puts "."

是否有办法让它只有一条连续的线?

Answers:


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?真正需要的..我使用Ruby 1.8.7和我做的事情只是print和我没有问题..
rubyprince

6
如果您要执行进度条之类的操作,则很有用。当您print单独使用它时,它可能会成块出现,因为它可以存储在缓冲区中,而不是立即写入(我不知道为什么)。它也可能是特定于OS的。
idlefingers 2011年

2
我用@ stdout.flush尝试过...使用.sync = true代替有什么好处?
蒂莫西T.11年

我认为将stdout设置sync为输出一个字符串是过大的。然后,如果您的应用输出很多,则速度会变慢。
akostadinov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.