2015-02-11 64 views
4

如何清除StringIO实例?在我写入并从字符串io读取之后,我想清除它。如何清除“StringIO”实例?

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

我试图flushrewind,但我仍然得到同样的内容。

回答

4

seekrewind仅影响下一次读/写操作,而不影响内部存储的内容。

您可以使用StringIO#truncateFile#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的#重开](http://ruby-doc.org/stdlib-1.9.3/libdoc/stringio/rdoc/StringIO.html#method-i-reopen)作品,以及:'io.string#=>“foo”; io.reopen( ''); io.string#=>“”'。是? – 2015-02-11 01:44:39

+0

@CarySwoveland,感谢您的评论。我不知道。我相应地更新了答案。 – falsetru 2015-02-11 01:51:45

1

我用truncaterewind。需要倒带才能为下一个操作准备io。

io.truncate(0) 
io.rewind