【问题标题】:Ruby doesn't read carriage return (\r) in output? [duplicate]Ruby 不读取输出中的回车符 (\r)? [复制]
【发布时间】:2015-01-08 15:47:28
【问题描述】:

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

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

我只想要一条不断更新的线路。谢谢。

【问题讨论】:

    标签: ruby output


    【解决方案1】:

    puts 将始终在末尾打印一个新行,因此它会执行您的回车,然后是一个新行。请改用print

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

    要查看它实际上在做正确的事情,您可以输入sleep

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

    【讨论】:

    • 但是如果我有一对嵌套的 while 循环并且我需要在两个循环中打印输出,到目前为止,puts 是我发现打印输出的唯一方法不是最后一行代码。
    【解决方案2】:

    您可以使用 print 而不使用任何回车,这样就可以了。

    喜欢这个

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

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

    【讨论】:

      【解决方案3】:

      您需要使用print 而不是puts

      例如:

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

      【讨论】:

        猜你喜欢
        • 2013-08-07
        • 2012-12-23
        • 2012-04-20
        • 1970-01-01
        • 2017-06-01
        • 1970-01-01
        • 2017-02-19
        • 1970-01-01
        • 2019-03-07
        相关资源
        最近更新 更多