撑伞的少女

Rust 所有权笔记:借用检查器在想什么

约 1 分钟读完

刚学 Rust 时总被借用检查器拦下。后来发现它的规则都来自一个直觉:同一时刻,要么很多人读,要么一个人写。

三条规则

  1. 每个值有且只有一个所有者
  2. 所有者离开作用域,值被释放
  3. 可以有任意多个 &T,或者恰好一个 &mut T,不能同时
fn main() {
    let mut s = String::from("墨");
    let r1 = &s;
    let r2 = &s;
    println!("{r1} {r2}");
    let w = &mut s; // r1、r2 之后不再使用,所以这里没问题
    w.push('紙');
    println!("{s}");
}

生命周期只是「标注」

生命周期参数不会改变任何值活多久,它只是告诉编译器:返回的引用和哪个参数绑在一起。

fn longest<'a>(a: &'a str, b: &'a str) -> &'a str {
    if a.len() > b.len() { a } else { b }
}

感想

和借用检查器吵架的过程,其实是在被迫把数据流想清楚。想清楚之后,代码往往也变简单了。

完

留言 COMMENTS

评论区尚未启用。到 giscus.app 生成参数,填进 src/config.ts 的 GISCUS 里就好。

检索 SEARCH