【问题标题】:How can I clear a `StringIO` instance?如何清除 `StringIO` 实例?
【发布时间】:2015-04-11 06:31:48
【问题描述】:

如何清除StringIO 实例?在我写入和读取字符串 io 后,我想清除它。

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

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

【问题讨论】:

    标签: ruby stringio


    【解决方案1】:

    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
    # => ""
    

    【讨论】:

    • 看来StringIO#reopen 也可以工作:io.string #=&gt; "foo"; io.reopen(''); io.string #=&gt; ""。是吗?
    • @CarySwoveland,感谢您的评论。我不知道。我相应地更新了答案。
    【解决方案2】:

    我使用truncaterewind。需要 rewind 来为下一个操作准备 io。

    io.truncate(0)
    io.rewind
    

    【讨论】:

      猜你喜欢
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2019-01-30
      • 2013-04-11
      • 2020-01-31
      相关资源
      最近更新 更多