与String相比,在Ruby中使用StringIO有什么好处?
什么时候使用Ruby的StringIO而不是使用String?
我想我理解它们之间的根本区别,就像“ 什么是ruby的StringIO类真的是什么? ”所强调的那样 ,StringIO使得能够以面向stream的方式读/写string。 但是这是什么意思呢?
什么是使用StringIO时使用StringIO的实际用法的一个很好的例子是不是真的会削减它?
基本上,它使得一个string看起来像一个IO对象,因此名为StringIO。
StringIO类具有read
和write
方法,所以它可以传递到您的代码的部分,旨在从文件或套接字读取和写入。 如果你有一个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.new
但s = StringIO.new
,请记住实际的string是通过StringIO#string
方法访问的。