Ruby没有实时输出

时间:2011-05-10 03:37:44

标签: ruby primes irb computation

我在Project Euler上遇到了一些问题。其中一个问题:

13195的主要因素是5,7,13和29。 数字600851475143的最大主要因素是什么?

我写了一些代码......它有效:

class Integer

  def primeFactors
  load('/home/arseno/ruby/lib/prime.rb')
  a = []

    for i in (1..self)
      div = self.to_f/i.to_f
      if((div==div.to_i)&&(Prime.prime?(i)))
        a << i
      end
    end
  a
  end
end

puts 13195.primeFactors

输出:

5
7
13
29

到目前为止一切顺利!现在,当我输入600851475143时,我的终端挂断了(理所当然,它正在计算很多东西!)所以我试图做的是在循环中放一个puts i,如果,那么我在实时迭代时捕获输出。

但是通过将此puts i放入循环中,Ruby不会在整个迭代中输出变量;相反,它保留在某种缓冲区中的值,并在计算完成时将它们清空。

这个特殊的问题永远需要Ruby来计算(它已经运行了10分钟),我怀疑它是在浮动转换中。

为什么Ruby(我的终端?)保持值直到计算结束?相反,我可以实时看到这些值吗?你有更好的方法吗?

1 个答案:

答案 0 :(得分:12)

尝试添加STDOUT.sync = true。您也可以在STDOUT.flush后尝试puts。更多信息here