Метод as_mut
Метод as_mut позволяет получить изменяемую ссылку
на значение, содержащееся внутри варианта Some.
Если же вариант содержит None, метод вернёт
None и не предоставит доступ к значению.
Метод не принимает параметров и не изменяет исходный
Option, а лишь заимствует его содержимое на время.
Этот метод особенно полезен, когда нужно изменить значение
внутри Option, не забирая его по владению.
Он возвращает Option<&mut T>, что позволяет
безопасно работать с внутренними данными через
изменяемую ссылку.
Синтаксис
option.as_mut()
Пример
Давайте создадим изменяемый Option с числом
и изменим его значение через метод as_mut:
fn main()
{
let mut opt = Some(5);
if let Some(value) = opt.as_mut() {
*value = 10;
}
println!("{:?}", opt);
}
Результат выполнения кода:
Some(10)
Пример
Давайте проверим работу метода на варианте None:
fn main()
{
let mut opt: Option<i32> = None;
if let Some(value) = opt.as_mut() {
*value = 10;
} else {
println!("Option is None");
}
println!("{:?}", opt);
}
Результат выполнения кода:
Option is None
None
Пример
Давайте используем as_mut для изменения строки
внутри Option:
fn main()
{
let mut opt = Some(String::from("abcde"));
if let Some(s) = opt.as_mut() {
s.push_str("12345");
}
println!("{:?}", opt);
}
Результат выполнения кода:
Some("abcde12345")