Изменяемое заимствование &mut
Изменяемое заимствование &mut позволяет временно
получить доступ к значению с правом его изменения,
не забирая владение. Параметром заимствование принимает
переменную, объявленную через let mut.
При этом одновременно может существовать только одно
изменяемое заимствование, и на время его жизни
нельзя иметь ни неизменяемых заимствований,
ни прямого доступа к исходной переменной.
Синтаксис
&mut value
Пример
Давайте создадим изменяемую переменную и изменим её значение через изменяемое заимствование:
fn main()
{
let mut x = 5;
let y = &mut x;
*y = 10;
println!("{}", x);
}
Результат выполнения кода:
10
Пример
Давайте передадим изменяемое заимствование в функцию, которая увеличивает значение на единицу:
fn increment(n: &mut i32)
{
*n += 1;
}
fn main()
{
let mut x = 5;
increment(&mut x);
println!("{}", x);
}
Результат выполнения кода:
6
Пример
Давайте изменим содержимое вектора через изменяемое заимствование:
fn main()
{
let mut v = vec![1, 2, 3, 4, 5];
let r = &mut v;
r.push(6);
println!("{:?}", v);
}
Результат выполнения кода:
[1, 2, 3, 4, 5, 6]
Пример
Давайте попробуем создать два изменяемых заимствования одновременно и убедимся, что компилятор это запрещает:
fn main()
{
let mut x = 5;
let a = &mut x;
let b = &mut x;
println!("{} {}", a, b);
}
Результат выполнения кода:
error[E0499]: cannot borrow `x` as mutable more than once at a time
Смотрите также
-
раздел
заимствование,
который описывает общий механизм заимствования значений -
раздел
неизменяемое заимствование,
которое даёт доступ к значению только для чтения -
раздел
правила заимствования,
которые регулируют одновременные заимствования -
раздел
перезаимствование,
которое позволяет временно переиспользовать заимствование