共用借用和專屬借用
Rust 會限制借用值的方式:
- 隨時擁有一或多個
&T
值,「或是」 - 只擁有一個
&mut T
值。
fn main() { let mut a: i32 = 10; let b: &i32 = &a; { let c: &mut i32 = &mut a; *c = 20; } println!("a: {a}"); println!("b: {b}"); }
- 上述程式碼不會編譯,因為系統會同時透過
c
和b
,以可變動項和不可變動項的格式借用a
。 - 請將
b
的println!
陳述式移到導入c
的範圍前,即可編譯程式碼。 - 經過該變更後,編譯器會發現系統使用
b
的時間,只會在新可變動項透過c
借用a
之前。這是借用檢查器中的功能,稱為「非詞彙生命週期」(non-lexical lifetimes)。