Rust 中的借用规则、生命周期与指针类型详解
1. 借用规则
在 Rust 中,借用规则维护了引用的单一所有权语义,具体规则如下:
- 引用的生命周期不能长于其所引用的值。因为若引用存活时间更长,它将指向无效值。
- 若存在对某个值的可变引用,在该作用域内不允许有其他对同一值的引用(无论是可变还是不可变引用)。可变引用是独占借用。
- 若没有对某个值的可变引用,在该作用域内可以有任意数量的对同一值的不可变引用。
Rust 编译器中的借用检查器会分析这些借用规则。Rust 社区戏称处理借用错误为“与借用检查器战斗”。
2. 借用的实际应用
2.1 函数中的借用
在函数调用时,如果只是读取值,转移所有权意义不大且受限,调用函数后就无法再使用该变量。可以通过引用传递参数,修改以下三方面内容:
- 变量绑定需设为可变:
let mut s = String::from("Borrow");
- 函数参数改为可变引用:
fn take_the_s(s: &mut String) {
s.push_str("ing");
}
- 调用函数时传递可变引用:
take_the_s(&mut s);