2010-03-01 4 views
83

Чтобы добавить существующую строку, это то, что я делаю.Добавление к существующей строке

s = 'hello' 
s.gsub!(/$/, ' world'); 

Есть ли лучший способ добавить к существующей строке.

Перед кто-то предлагает следующий ответ Лемм показать, что это один не работает

s = 'hello' 
s.object_id 
s = s + ' world' 
s.object_id 

В приведенном выше случае object_id будет отличаться для двух случаев.

ответ

139

Вы можете использовать <<, чтобы добавить строку на место.

s = "foo" 
old_id = s.object_id 
s << "bar" 
s      #=> "foobar" 
s.object_id == old_id #=> true 
+1

Как поживаете сек < xxjjnn

+0

@RainbowPony Как мой ответ показывает, '<<' уже изменяет состояние объекта. Так что 'concat'. – sepp2k

+0

Не всегда: irb (main): 038: 0> widget.notes.where (: author_id => a) .first.message.concat ("Картофель") => "Y halo thar! = DPotato" irb (main): 039: 0> widget.notes.where (: author_id => a) .first.message => "Y halo thar! = D" # widget является экземпляром виджета. У него могут быть заметки. сообщение attr_accessible. – xxjjnn

44

вы также можете использовать следующие:

s.concat("world") 
+0

+1 для цепочки этого метода. –

+3

'' 'также должен быть связан с цепочкой, так как он возвращает строку. – scottyseus

+0

Действительно - и << также короче, чтобы писать И выглядит похоже на вариант C++ cout. << это красота! – shevy

4

Могу ли я спросить, почему это важно?

Я знаю, что это не прямой ответ на ваш вопрос, но тот факт, что вы пытаетесь сохранить идентификатор объекта строки, может указывать на то, что вы должны снова взглянуть на то, что вы пытаетесь сделать.

Возможно, вы обнаружите, что, опираясь на идентификатор объекта строки, вы получите ошибки, которые трудно отследить.

+3

Может быть, изменить параметры по ссылке? (что, вероятно, плохой дизайн на полноценном языке Oop) – hurikhan77

+4

Или просто не создавать слишком много новых объектов? Это вполне разумно. –

+1

Несомненно, если вы изменяете строку на месте и создаете новый объект, тогда старый объект получает сбор мусора? Должны ли мы действительно беспокоиться о количестве создаваемых объектов String? – Shadowfirebird

Смежные вопросы