Каковы преимущества использования StringIO в Ruby, а не String?
Когда считается правильным использовать Ruby StringIO, а не просто использовать String?
Я думаю, что я понимаю фундаментальное различие между ними, как подчеркнуто "Что такое класс Ruby's StringIO?, что StringIO позволяет читать и писать с/на Строка ориентирована на поток. Но что это значит практически?
Что является хорошим примером практического использования для использования StringIO, когда просто использование String на самом деле не разрезает его?
Ответы
Ответ 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
.