Полагаю, причина, по которой вы чувствуете, что replace
не имеет смысла, заключается в том, что существует оператор присвоения =
(не очень релевантный для gsub
).
Важным моментом является то, что String
экземпляры являются изменяемыми объектами. Используя replace
, вы можете изменить содержимое строки, сохранив ее идентичность как объекта. Сравните:
a = 'Hello' # => 'Hello'
a.object_id # => 84793190
a.replace('World') # => 'World'
a.object_id # => 84793190
a = 'World' # => 'World'
a.object_id # => 84768100
Обратите внимание, что replace
не изменил идентификатор строкового объекта, тогда как простое присваивание изменило его. Эта разница имеет некоторые последствия. Например, предположим, что вы присвоили некоторые переменные экземпляра для экземпляра строки. К replace
эта информация будет сохранена, но если вы назначите одну и ту же переменную просто другой строке, вся эта информация исчезнет.