如何在Ruby on Rails中使用“puts”将内容输出到控制台而不换行?

174

我有一个方法,它通过循环 -- 我希望在控制台中每次循环输出一个 "."。然而,当我使用 puts "." 时,它会在每个 "." 后面添加一个换行符。

是否有一种方法让它只有连续的一行呢?

1个回答

217
你需要使用print而不是puts。另外,如果你想让点出现得更平滑,你需要在每次打印后刷新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

7
真的需要使用$stdout.flush吗?我正在使用Ruby 1.8.7,只用了print就完成了任务,没有出现任何问题。 - rubyprince
7
如果你正在做进度条之类的东西,使用print命令可能会很有用。当你只是单独使用print时,它可能会以块状输出,因为它可能会被存储在缓冲区中而不是立即写入(我不确定具体原因)。这也可能与操作系统有关。 - idlefingers
2
我尝试使用@stdout.flush...使用.sync=true有什么好处吗? - Satchel
我认为将stdout设置为“sync”来输出一个字符串是过度的。如果你的应用程序输出很多内容,那么它会变得更慢。 - akostadinov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接