Rust 所有权笔记:借用检查器在想什么
刚学 Rust 时总被借用检查器拦下。后来发现它的规则都来自一个直觉:同一时刻,要么很多人读,要么一个人写。
三条规则
- 每个值有且只有一个所有者
- 所有者离开作用域,值被释放
- 可以有任意多个
&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里就好。