程序运行不按顺序

我试过运行这个简单的代码:

puts 4 i = gets puts i 

它是“工作”,但控制台要求一个字符串,然后它打印4i

gets之前添加flush调用:

 $stdout.flush 

而不是显式调用$stdout.flush

 $stdout.sync = true 

为了我使用ruby 1.8.7,1.9.2和ree工作。 您使用的是什么版本的ruby和操作系统?

你有什么希望在这里完成的? 通常,解释器会在向您显示输出之前收集所有数据。 这简直不是bash 🙂

我想你可能会遇到输出缓冲 。 但是你的代码示例没有显示程序如何“询问”输入,所以我猜你在ruby开始之前键入了答案。 然后你的ruby程序从输入缓冲区读取输入,因为数据不是直接从键盘读取的。

您确定您的问题是由您向我们展示的代码引起的吗?

通常,在终端上以错误的顺序显示数据的问题是由使用两个不同的输出流引起的:例如STDINSTDERR 。 每个流可以决定在不同时间刷新其数据。

如果你想确保在事情发生之前显示文本(如本例所示),请使用’flush’命令,正如Yossi建议的那样。