2015-02-11 2 views
4

Как я могу удалить экземпляр StringIO? После того, как я напишу и прочитаю из строки io, я хочу ее очистить.Как я могу удалить экземпляр `StringIO`?

require "stringio" 
io = StringIO.new 
io.write("foo") 
io.string #=> "foo" 
# ... After doing something ... 
io.string #=> Expecting "" 

Я попытался flush и rewind, но я все еще получаю такое же содержание.

ответ

4

seek или rewind влияют только на следующие операции чтения/записи, а не на содержимое внутреннего хранилища.

Вы можете использовать StringIO#truncate как File#truncate:

require 'stringio' 
io = StringIO.new 
io.write("foo") 
io.string 
# => "foo" 
io.truncate(0) # <--------- 
io.string 
# => "" 

Альтернатива:

Вы можете также использовать StringIO#reopen (Примечание: File не reopen метод):

io.reopen("") 
io.string 
# => "" 
+2

Оказывается, что [StringIO # Reopen] (http://ruby-doc.org/stdlib-1.9.3/libdoc/stringio/rdoc/StringIO.html#method-i-reopen) работает хорошо : 'io.string # =>" foo "; io.reopen (''); io.string # => "" '. Да? –

+0

@CarySwoveland, Спасибо за комментарий. Я этого не знал. Я соответствующим образом обновил ответ. – falsetru

1

Я использую truncate И rewind. Перемотка требуется для подготовки io для следующих операций.

io.truncate(0) 
io.rewind 
Смежные вопросы