如何在红宝石中产生延迟

Ami*_*mar 9 ruby

红宝石如何产生延迟?

我使用了睡眠声明,但它没有给我我想要的东西.

puts "amit"
sleep(10)
puts "scj"
Run Code Online (Sandbox Code Playgroud)

我希望它首先打印amit,然后延迟10秒,然后打印scj.

但在上面的情况下会发生什么,它会暂停10秒然后它将打印amit和scj在一起.我不希望这样.

我希望你得到我想说的话.

Jon*_*eet 9

我无法重现这一点.从控制台,这完全符合您的期望:

puts "amit"
sleep 10
puts "scj"
Run Code Online (Sandbox Code Playgroud)

(Linux上的Ruby 1.8.6)

你能提供一个类似的简短但完整的例子,它不能做你想做的事情 - 或者更多地解释你的背景吗?

如果您正在编写Web应用程序,那么浏览器可能只会在编写完整个响应后才能看到任何数据 - 这可以解释您所看到的内容.如果是这种情况,您将需要一种不同的方法,允许首先写入初始响应,然后让浏览器再次发出请求.延迟可能在服务器或客户端,取决于没有方案.


sep*_*p2k 8

拨打$stdout.flush电话到睡觉前.输出可能是缓冲的(虽然通常输出只是行缓冲,所以puts产生换行,应该没有刷新,但显然你的终端不是这样).