共用借用和專屬借用

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}");
}
  • 上述程式碼不會編譯,因為系統會同時透過 cb,以可變動項和不可變動項的格式借用 a
  • 請將 bprintln! 陳述式移到導入 c 的範圍前,即可編譯程式碼。
  • 經過該變更後,編譯器會發現系統使用 b 的時間,只會在新可變動項透過 c 借用 a 之前。這是借用檢查器中的功能,稱為「非詞彙生命週期」(non-lexical lifetimes)。