相关疑难解决方法(0)

Ruby的File.open和对f.close的需求

在大多数编程语言中,使用文件的流程是开放使用关闭的常识.然而,我在ruby代码中多次看到无法比拟的File.open调用,而且我在ruby文档中发现了这些宝石知识:

当垃圾收集器声明I/O流时,它们会自动关闭.

darkredandyellow friendly irc承担了这个问题:
[17:12]是的,而且,文件描述符的数量通常受操作系统的限制
[17:29]我假设在垃圾收集器清理之前你很容易用完可用的文件描述符起来.在这种情况下,您可能希望自己使用它们."垃圾收集者声称." 意味着GC将来会在某个时刻发挥作用.而且价格昂贵.明确关闭文件的原因很多.

  1. 我们需要明确关闭吗?
  2. 如果是,那么为什么GC会自动关闭?
  3. 如果不是那么为什么选择?

ruby file

86
推荐指数
2
解决办法
6万
查看次数

Ruby没有实时输出

我在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
Run Code Online (Sandbox Code Playgroud)

输出:

5
7
13
29
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好!现在,当我输入600851475143时,我的终端挂断了(理所当然,它计算了很多东西!)所以我试图做的是把一个puts i放在循环/ if中,这样我就可以捕获输出了实时迭代...

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

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

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

ruby primes irb computation

3
推荐指数
1
解决办法
1411
查看次数

标签 统计

ruby ×2

computation ×1

file ×1

irb ×1

primes ×1