如何清空一个 `StringIO` 实例?

6
我该如何清除一个StringIO实例?在我向字符串 io 中写入和读取之后,我想要将其清空。
require "stringio"
io = StringIO.new
io.write("foo")
io.string #=> "foo"
# ... After doing something ...
io.string #=> Expecting ""

我尝试了flushrewind,但仍然得到相同的内容。

2个回答

6
seekrewind 只影响下一次读/写操作,而不影响内部存储的内容。
您可以像使用 File#truncate 一样使用 StringIO#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也能用:io.string #=> "foo"; io.reopen(''); io.string #=> ""。是吗? - Cary Swoveland
@CarySwoveland,谢谢您的评论。我不知道这一点。我已经相应地更新了答案。 - falsetru
请查看JML的下面答案。如果没有倒带,StringIO的未来写入将从前一个值的长度之后的位置开始,并且字符串将用二进制零填充。 - Keith Bennett

4
我使用truncaterewind。为了准备进行下一步操作,必须使用rewind
io.truncate(0)
io.rewind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接