49

String だけを使用するのではなく、Ruby の StringIO を使用することが適切と見なされるのはいつですか?

「 Ruby の StringIO クラスとは一体何なのか」で強調されているように、StringIO を使用すると、ストリーム指向の方法で String から読み書きできるようになるという根本的な違いを理解していると思います。しかし、これは実際には何を意味するのでしょうか?

単純に String を使用してもうまくいかない場合に、StringIO を実際に使用する良い例は何ですか?

4

2 に答える 2

73

基本的に、文字列を IO オブジェクトのように見せるため、StringIO という名前が付けられました。

StringIOクラスにはreadおよびメソッドがあるため、writeファイルまたはソケットから読み書きするように設計されたコードの一部に渡すことができます。ファイルコードをテストする目的で、文字列をファイルのように見せたい場合は便利です。

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
于 2012-09-25T23:19:41.977 に答える
29

何度も何度も使用せずに行ごとにテキストを追加するユースケースでは、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を介してアクセスされることに注意してください。StringIO#string

于 2013-11-12T02:17:35.163 に答える