Почему не Руби есть реальный StringBuffer или StringIO ?

недавно я прочитал a nice post on using StringIO в Ruby. То, что автор не упоминает, однако, заключается в том, что StringIO - это просто "и" нет"." Вы не, например:

s = StringIO.new
s << 'foo'
s << 'bar'
s.to_s
# => should be "foonbar"
# => really is ''`

Ruby действительно нуждается в StringBuffer как и Java. Класс StringBuffer служить двум важным целям. Во-первых, они позволяют тестировать выход половину того, что Руби StringIO делает. Во-вторых, они полезны для наращивания длинных строк мелких деталей-что-то, что Джоэл напоминает нам снова и снова, в противном случае-очень-очень медленно.

Есть хорошая замена?

@Майк Стоун

Это правда, что Строки в Ruby являются изменяемыми, но это не значит, что мы всегда должны полагаться на то, что функциональность. Если stuff имеет большой размер, производительности и требований к памяти этот, например, - это действительно плохо.

result = stuff.map(&:to_s).join(' ')

"правильный" путь к делать этот в Java-это:

result = StringBuffer.new("")
for(String s : stuff) {
  result.append(s);
}

Несмотря на мои Java немного ржавый.

@Майк Стоун #2:Вау!!!!! Как же я скучаю по API? Я по-прежнему не уверены в том, что производительность StringIO, но, по крайней мере, сейчас "Рубин" проблема, не моя :)

Найдено 5 ответов:

Why doesn't Ruby have a real StringBuffer or StringIO?

http://stackoverflow.com/questions/10323/why-doesnt-ruby-have-a-real-stringbuffer-or-stringio

Посмотреть решение →