Недавно я прочитал хороший пост при использовании StringIO
в Ruby. Однако автор не упоминает, что StringIO
- это просто "я". Там нет "O." Вы не можете сделать это, например:
s = StringIO.new
s << 'foo'
s << 'bar'
s.to_s
# => should be "foo\nbar"
# => really is ''`
Ruby действительно нуждается в 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 немного ржавая.