【问题标题】:Just for fun, how do I write a ruby program that slowly prints to stdout one character at a time?只是为了好玩,我如何编写一个一次缓慢地打印到标准输出一个字符的 ruby​​ 程序?
【发布时间】:2011-06-23 03:39:55
【问题描述】:

我认为这可能有效

 "a b c d e f g h i j k".each {|c| putc c ; sleep 0.25}

我希望看到“a b c d e f j”一次打印一个字符,每个字符之间有 0.25 秒。而是一次性打印整个字符串。

【问题讨论】:

    标签: ruby stdout


    【解决方案1】:

    这是我的“慢打印”方式:

    for i in "a b c d e f g h i j k".chars.to_a
      print i
      sleep 0.25
    end
    

    【讨论】:

      【解决方案2】:

      Ruby 缓冲输出并在达到一定大小后将其刷新到标准输出。你可以强制它像这样冲洗。

      "a b c d e f g h i j k".each_char do |char|
         putc char
         $stdout.flush
         sleep 0.25
      end
      

      注意:如果您不想在打印时字符之间有空格,请使用.split.each 而不是.each_char

      只是为了好玩:定义如下:

      def slowly
        yield.each_char { |c| putc c; $stdout.flush; sleep 0.25 }
      end
      

      你可以这样做:

      slowly do
        "a b c d e f g h i j k"
      end
      

      【讨论】:

        【解决方案3】:

        试试:

        %w"a b c d e f g h i j k".each {|c| putc c ; sleep 0.25}
        

        这与 Ruby 1.9.2 一样工作,不需要在每次写入之间刷新 STDOUT。

        如果您希望中间的空格删除 %w 并使用 each_char 而不是 each

        【讨论】:

          【解决方案4】:

          两件事:

          1. 您需要使用.each_char 来遍历字符。在 Ruby 1.8 中,String.each 将逐行运行。在 Ruby 1.9 中,String.each 已弃用。
          2. 如果您希望字符立即出现,您应该手动刷新$stdout。否则,它们往往会被缓冲,以便字符在最后一次全部出现。

          .

          #!/usr/bin/env ruby
          "a b c d d e f g h i j k".each_char {|c| putc c ; sleep 0.25; $stdout.flush }
          

          【讨论】:

            【解决方案5】:

            两件事:

            1. 在使用each 之前,您需要将该字符串拆分为一个数组。
            2. 关闭output buffering

              $stdout.sync = true
              "a b c d d e f g h i j k".split(" ").each {|c| putc c ; sleep 0.25}
              

            【讨论】:

            • 你不需要split()的参数,因为这是默认的。 .split.each 可以。
            • @Mark,太酷了!我真的不知道 Ruby,我只是回答“好玩”,但我比二江快一分钟:D
            猜你喜欢
            • 2014-02-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-13
            • 1970-01-01
            • 2022-11-18
            相关资源
            最近更新 更多