什么时候使用Ruby的StringIO而不是仅仅使用String是合适的?

I think I understand the fundamental difference between them as highlighted by "What is ruby's StringIO class really?", that StringIO enables one to read and write from/to a String in a stream-oriented manner. But what does this mean practically?

当仅仅使用String并不能真正解决问题时,使用StringIO的一个很好的实用例子是什么?

推荐答案

基本上,它使字符串看起来像IO对象,因此命名为StringIO.

StringIO类有readwrite个方法,因此可以将其传递给代码中用于从文件或套接字读写的部分.如果你有一个字符串,并且为了测试你的文件代码,你希望它看起来像一个文件,这很好.

def foo_writer(file)
  file.write "foo"
end

def test_foo_writer
  s = StringIO.new
  foo_writer(s)
  raise "fail" unless s.string == "foo"
end

Ruby相关问答推荐

Ruby:对于不存在的键,使用缺省值Hash在Hash中存储Hash

根据部分已知值判断数组内容的简洁 Rubyist 方法是什么?

ASDF 上缺少 Ruby 版本

令人惊讶的有效 Ruby 语法:% 无处不在

如何使 Sinatra 通过 HTTPS/SSL 工作?

`Range#include?` 和 `Range#cover?` 有什么区别?

如何使用 RSpec 忽略或跳过测试方法?

拆分 Ruby 字符串时如何保留分隔符?

如何在两个浮点数之间的范围内最好地创建一个随机浮点数

根据另一个数组的元素对数组进行排序

在单个 node 上使用 XPath 返回所有 node 中的元素

确定字符串数组是否包含ruby中的某个子字符串

Rake 与 Thor 的自动化脚本?

Ruby中的常量或类变量?

文字数字中的下划线是什么意思?

如何在 Ruby 符号中转义破折号-?

如何在 Ruby 中获取命名空间中的所有类名?

将两个数组组合成哈希

我可以在 OS X v10.6.8 上升级到当前版本的 Ruby (2.2.3) 吗?

等号 ('=') 放在方法定义中的方法名称之后有什么作用?