変数をシャドーイングしても保持している借用参照は解放されないようです。次のコードはコンパイルされません。エラーメッセージが表示されてなぜシャドウイングは借用した参照を解放しないのですか?
fn main() {
let mut a = 40;
let r1 = &mut a;
let r1 = "shadowed";
let r2 = &mut a;
}
:
error[E0499]: cannot borrow `a` as mutable more than once at a time
--> src/main.rs:5:19
|
3 | let r1 = &mut a;
| - first mutable borrow occurs here
4 | let r1 = "shadowed";
5 | let r2 = &mut a;
| ^second mutable borrow occurs here
6 | }
| - first borrow ends here
私が最初に参照r1
が第2の基準r2
を借りる前に隠されているので、コードをコンパイルすると予想します。明らかに、最初の借り入れはブロックの終わりまで続きますが、それは4行目以降はアクセスできなくなります。その理由は何ですか?
注:現時点では借用はレキシカルですが、変更する作業があります。将来(non-Lexical Lifetimes:NLLが実装されると)rustcは 'r2'が形成されるまでに' r1'が使われないので、大丈夫です。 –