Ruby 没有在输出中读取回车符 return (\r)?

Ruby doesn't read carriage return (\r) in output?

在 ruby 中,我如何使我的输出(通过 puts 方法)在一行上,而不是一行接一行,并且我的控制台被输出淹没。基本上我希望输出在一行中不断更新,并继续写入最后一个输出。我尝试在字符串末尾添加一个 '\r' 字符,但 ruby 只是忽略它并继续逐行打印 while 循环的输出:

i=0
  while i<90
    puts  "#{i} matt lao \r"
    i+=1
  end

我只想要一个不断更新的行。谢谢。

您需要使用 print 而不是 puts

例如:

90.times do |i|
  print "#{i} matt lao \r"; sleep 0.02
end

puts 总是会在末尾打印一个新行,所以它正在做你的马车 return 但之后是一个新行。请改用 print

90.times { |i| print "#{i} matt lao \r" }

要查看它是否确实在做正确的事情,您可以坚持 sleep:

90.times { |i| print "#{i} matt lao \r"; sleep 0.01 }

您可以在没有任何回车的情况下使用打印 return,这样就可以正常工作。

像这样

 2.1.1 :016 > 0.upto(4){|i| print "#{i} "}
 0 1 2 3 4  => 0 

puts 会自动添加一个新行,而 print 不会。