Метод get_mut
Метод get_mut возвращает изменяемую ссылку
на подстроку, заданную диапазоном байтов.
Параметром метод принимает диапазон индексов
в виде Range. Если границы диапазона
не совпадают с границами символов UTF-8 или
выходят за пределы строки, метод возвращает
None. В случае успеха возвращается
Some с изменяемой ссылкой на подстроку.
Так как метод возвращает изменяемую ссылку,
исходная строка должна быть объявлена как
изменяемая переменная, а также должна быть
типа String, а не &str.
Синтаксис
str.get_mut(range)
Пример
Давайте получим изменяемую ссылку на подстроку с индексами от 1 до 4 и заменим её содержимое:
fn main()
{
let mut s = String::from("abcde");
if let Some(sub) = s.get_mut(1..4) {
*sub = "XYZ";
}
println!("{}", s);
}
Результат выполнения кода:
"aXYZde"
Пример
Давайте попробуем получить изменяемую ссылку
по диапазону, который не совпадает с границами
символов UTF-8. В строке "日本語"
каждый символ занимает 3 байта, поэтому
диапазон 0..1 не является корректным:
fn main()
{
let mut s = String::from("日本語");
let res = s.get_mut(0..1);
println!("{:?}", res);
}
Результат выполнения кода:
None
Пример
Давайте получим изменяемую ссылку на весь диапазон строки и изменим её полностью:
fn main()
{
let mut s = String::from("12345");
if let Some(sub) = s.get_mut(..) {
*sub = "abcde";
}
println!("{}", s);
}
Результат выполнения кода:
"abcde"
Смотрите также
-
метод
get,
который возвращает неизменяемую ссылку на подстроку по диапазону -
метод
split_at_mut,
который делит строку на две изменяемые части по индексу -
метод
as_bytes_mut,
который возвращает изменяемый срез байтов строки -
метод
is_char_boundary,
который проверяет, является ли индекс границей символа UTF-8