如何在轨道上的红宝石中没有换行符时使用"puts"到控制台?

Tim*_* T. 153 ruby io console

我有一个循环的方法 - 我希望它输出一个"." 每个循环所以我可以在控制台中看到它.但是,当我使用时,它会在每个结尾处放置一个换行符puts ".".

如果有一种方式,它只是一个连续的线?

idl*_*ers 196

你需要使用print而不是puts.此外,如果您希望点平滑显示,则需要在每次打印后刷新stdout缓冲区...

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

100.times do
  print_and_flush "."
  sleep 1
end
Run Code Online (Sandbox Code Playgroud)

编辑:我只是在调查冲洗背后的理由来回答@ ruby​​prince的评论,并意识到这可以通过简单地使用$stdout.sync = true...... 来清理一下......

$stdout.sync = true

100.times do
  print "."
  sleep 1
end
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在执行类似进度条的操作,这将非常有用.当你只使用`print`时,它可以以块的形式出现,因为它可以存储在缓冲区中而不是直接写入(我不确切知道为什么).它也可能是特定于操作系统的. (6认同)
  • 真的需要`$ stdout.flush`吗?我正在使用Ruby 1.8.7而且我用`print`做了一些事情,我没有遇到任何问题. (2认同)
  • 我用@ stdout.flush试了一下...使用.sync = true的任何好处呢? (2认同)