Я недавно прочитал хороший пост об использовании StringIO
в Ruby. Однако автор не упоминает, что StringIO
- это просто «я». Там нет "О" Вы не можете сделать это, например:
s = StringIO.new
s << 'foo'
s << 'bar'
s.to_s
# => should be "foo\nbar"
# => really is ''`
Руби действительно нужен StringBuffer, как и тот, который есть в Java. StringBuffers служат двум важным целям. Во-первых, они позволяют вам проверить выходную половину того, что делает Ruby StringIO. Во-вторых, они полезны для создания длинных струн из мелких деталей - то, что Джоэл напоминает нам снова и снова, в остальном очень и очень медленно.
Есть хорошая замена?
Это правда, что строки в Ruby являются изменяемыми, но это не значит, что мы всегда должны полагаться на эту функциональность. Если stuff
большой, то требования к производительности и памяти, например, очень плохие.
result = stuff.map(&:to_s).join(' ')
«Правильный» способ сделать это в Java:
result = StringBuffer.new("")
for(String s : stuff) {
result.append(s);
}
Хотя моя Java немного ржавая.