在Ruby中使用StringIO而不是String有什么好处?

时间:2012-09-25 22:50:20

标签: ruby string stringio

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

我认为我理解它们之间的根本区别,正如“What is ruby's StringIO class really?”所强调的那样,StringIO使人们能够以面向流的方式读取和写入字符串。但这实际上意味着什么?

简单地使用String时,使用StringIO实际使用的一个很好的例子是不是真的会削减它?

2 个答案:

答案 0 :(得分:66)

基本上,它使字符串看起来像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

答案 1 :(得分:26)

我非常喜欢StringIO,用于逐行添加文本的用例,而不必一遍又一遍地使用"\n"。例如,而不是:

s = ''
s << "\n" << "some text on a new line"
s << "\nthis is pretty awkward"
s = "#{s}\neven more ugly!"

我可以这样做

s = StringIO.open do |s|
  s.puts 'adding newlines with puts is easy...'
  s.puts 'and simple'
  s.string
end

哪个更干净。没有必要使用String.IO的块形式,您可以像这样创建一个对象:s = StringIO.new但是无论如何,请务必记住通过{{1}访问实际的字符串方法。