Ответ 1
replace
изменяет содержимое текущего экземпляра, а не назначает новый экземпляр. См. Различия:
a = 'old_string'
b = a
b.replace 'new_string'
a
# => "new_string"
против
a = 'old_string'
b = a
b = 'new_string'
a
# => "old_string"
Я возился и решил посмотреть, вернет ли "abcde".replace("a", "e")
"ebcde"
. Оказывается, это не то, как работает замена (я допускаю, что я догадался по имени метода, если один из них существует для этих целей).
Вместо того, чтобы прочитать документы, я обнаружил, что у него странное поведение.
string = "abcde"
string.replace("e") #=> "e"
string
теперь "e"
.
В чем смысл метода замены? Для меня это выглядит как метод сеттера, но вы можете так же легко сделать string = "e"
.
Существуют ли конкретные варианты использования для замены?
replace
изменяет содержимое текущего экземпляра, а не назначает новый экземпляр. См. Различия:
a = 'old_string'
b = a
b.replace 'new_string'
a
# => "new_string"
против
a = 'old_string'
b = a
b = 'new_string'
a
# => "old_string"
Как и ответ Ури:
a = "foo"
# => "foo"
a.object_id
# => 70267150553520
a.replace("bar")
# => "bar"
a.object_id
# => 70267150553520
Его можно использовать для изменения значения параметра, переданного методу:
def change(string)
string.replace('bar')
end
s = 'foo'
change(s)
s #=> 'bar'