Подтвердить что ты не робот

Каковы преимущества использования StringIO в Ruby, а не String?

Когда считается правильным использовать Ruby StringIO, а не просто использовать String?

Я думаю, что я понимаю фундаментальное различие между ними, как подчеркнуто "Что такое класс Ruby's StringIO?, что StringIO позволяет читать и писать с/на Строка ориентирована на поток. Но что это значит практически?

Что является хорошим примером практического использования для использования StringIO, когда просто использование String на самом деле не разрезает его?

4b9b3361

Ответ 1

В основном, он делает строку похожим на объект ввода-вывода, поэтому имя 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

Ответ 2

Мне очень нравится 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.