Как создать объект ввода-вывода из файла? - PullRequest
2 голосов
/ 01 марта 2012

Еще один глупый вопрос, но я не нашел четкого примера.

Мне нужен объект 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 один раз? или есть стандартный способ сделать это?

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

FILE является подклассом IO

irb(main):001:0> File.superclass
=> IO 

В вашем случае i и f относятся к одному и тому же объекту. Отсюда и наблюдение. Вы можете использовать объект File для TestRunner.

0 голосов
/ 01 марта 2012

Не могли бы вы сделать что-то вроде этого:

File.open("result.txt", 'w') do |f|
  t = TestRunner.new(your_suite, NORMAL, f)
  t.start
end

Это запустит тест с использованием объекта result.txt io. Он автоматически закроет файл, даже если произойдет исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...