Rustのドキュメントを読んで勉強中です。
ドキュメント上では、「可変な参照には大きな制約が一つあります: 特定のスコープで、ある特定のデータに対しては、 一つしか可変な参照を持てないことです。」
とのことですが、以下のコードではコンパイルエラーになりません。
なぜでしょうか?
該当のソースコード
Rust
1fn main() { 2 let mut s = String::from("test"); 3 4 let s1 = &mut s; 5 let s2 = &mut s; 6 7 println!("{}", s2); 8}
また、以下の場合では、望むエラーが出ます。
Rust
1fn main() { 2 let mut s = String::from("test"); 3 4 let s1 = &mut s; 5 6 let s2 = &mut s; 7 8 println!("{}", s1); 9}
エラーメッセージ
warning: unused variable: `s2` --> src/main.rs:6:9 | 6 | let s2 = &mut s; | ^^ help: if this is intentional, prefix it with an underscore: `_s2` | = note: `#[warn(unused_variables)]` on by default error[E0499]: cannot borrow `s` as mutable more than once at a time --> src/main.rs:6:14 | 4 | let s1 = &mut s; | ------ first mutable borrow occurs here 5 | 6 | let s2 = &mut s; | ^^^^^^ second mutable borrow occurs here 7 | 8 | println!("{}", s1); | -- first borrow later used here error: aborting due to previous error; 1 warning emitted For more information about this error, try `rustc --explain E0499`. error: could not compile `pr2`
いずれにしても、同じように同一スコープ内で可変な参照を2つ持っているのでコンパイルエラーとなるものと思っていたのですが。。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/19 07:43