与String相比,在Ruby中使用StringIO有什么好处?

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

我想我理解它们之间的根本区别,就像“ 什么是ruby的StringIO类真的是什么? ”所强调的那样 ,StringIO使得能够以面向stream的方式读/写string。 但是这是什么意思呢?

什么是使用StringIO时使用StringIO的实际用法的一个很好的例子是不是真的会削减它?

基本上,它使得一个string看起来像一个IO对象,因此名为StringIO。

StringIO类具有readwrite方法,所以它可以传递到您的代码的部分,旨在从文件或套接字读取和写入。 如果你有一个string,并且为了testing你的文件代码,你希望它看起来像一个文件,这很好。

 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 

我真的很喜欢用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的块forms,你可以像这样创build一个对象: s = StringIO.news = StringIO.new ,请记住实际的string是通过StringIO#string方法访问的。