Освободите заимствования в Русте
Я пробую Rust и у меня есть некоторые проблемы с пониманием "заимствования".
fn main() {
let mut x = 10;
let mut a = 6;
let mut y = &mut x;
*y = 6;
y = &mut a;
x = 15;
println!("{}", x);
}
И у меня есть ошибка:
error[E0506]: cannot assign to `x` because it is borrowed
--> <anon>:9:5
|
4 | let mut y = &mut x;
| - borrow of `x` occurs here
...
9 | x = 15;
| ^^^^^^ assignment to borrowed `x` occurs here
error[E0502]: cannot borrow `x` as immutable because it is also borrowed as mutable
--> <anon>:10:20
|
4 | let mut y = &mut x;
| - mutable borrow occurs here
...
10 | println!("{}", x);
| ^ immutable borrow occurs here
11 | }
| - mutable borrow ends here
Как я могу выпустить x
от "y
-borrowing "?
1 ответ
Решение
В настоящее время это является ограничением средства проверки Rust заимствований, часто называемого "нелексическими временами жизни" (NLL). Проблема здесь в том, что когда вы назначаете ссылку на переменную (let mut y = &mut x;
) ссылка должна быть действительной для всей области видимости переменной. Это означает, что "х заимствовано" длится для всего объема y
, Таким образом, компилятор не заботится о строке y = &mut a;
!
Вы можете прочитать намного больше (технических) обсуждений по этому вопросу здесь, в проблеме отслеживания.