ChatGPT解决这个技术问题 Extra ChatGPT

如何在没有换行符的情况下在控制台上使用“放置”?

我有一个循环的方法——我希望它输出一个“。”每个循环,所以我可以在控制台中看到它。但是,当我使用 puts "." 时,它会在每个末尾添加一个换行符。

如果有办法让它只有一条连续的线?


i
idlefingers

您需要使用 print 而不是 puts。此外,如果您希望点看起来平滑,则需要在每次打印后刷新标准输出缓冲区......

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

100.times do
  print_and_flush "."
  sleep 1
end

编辑: 我只是在调查 flush 背后的原因来回答 @rubyprince 的评论,并意识到这可以通过简单地使用 $stdout.sync = true 来清理一点......

$stdout.sync = true

100.times do
  print "."
  sleep 1
end

真的需要 $stdout.flush 吗?..我使用的是 Ruby 1.8.7,我只用 print 做了一些事情,我没有任何问题..
如果您正在执行进度条之类的操作,它会很有用。当您仅使用 print 本身时,它可以以块的形式出现,因为它可以存储在缓冲区中而不是立即写入(我不知道确切原因)。它也可能是特定于操作系统的。
我用@stdout.flush 尝试过......使用 .sync=true 有什么好处吗?
我认为将 stdout 设置为 sync 输出一个字符串是一种过度杀伤力。然后,如果您的应用程序输出很多,它会变慢。