另一个看似愚蠢的问题,但还没有找到一个明确的例子。
我需要一个IO对象作为函数的参数actually its the new function in this class:
我使用这种方式,但在写了一些东西后使用文件描述符作为IO时出现了一些问题:
irb(main):001:0> f= File.open("result.txt","w")
=> #<File:result.txt>
irb(main):002:0> i=IO.new(f.to_i,"w")
=> #<IO:0x3b5cb90>
irb(main):003:0> i.write "hello the world"
=> 15
irb(main):004:0> i.close
=> nil
irb(main):005:0> f.close
Errno::EBADF: Bad file descriptor - result.txt
from (irb):5:in `close'
from (irb):5
from :0
所以我只需要关闭i或f一次?或者有一种标准的方法可以做到这一点?
答案 0 :(得分:3)
FILE
是IO
irb(main):001:0> File.superclass
=> IO
在您的情况下,i和f指的是同一个对象。因此观察。您可以将File对象用于TestRunner。
答案 1 :(得分:0)
你不能做这样的事情:
File.open("result.txt", 'w') do |f|
t = TestRunner.new(your_suite, NORMAL, f)
t.start
end
这将使用result.txt文件io对象开始运行测试。即使发生异常,它也会自动关闭文件。