Rust 核心概念解析
一、变量命名规则
基本规则
- 变量名可包含字母、数字和下划线
- 必须以字母或下划线开头
- 区分大小写
特殊符号 ' 的使用
- 主要用于生命周期参数(
'a,'static) - 允许但不推荐在普通变量名中使用
- 字符字面量必须使用单引号(
let c = 'a';)
命名建议
// 合法但非常规的命名
let x' = 20;
// 推荐写法
let x_prime = 25;
let r#type = "关键字转义";
二、所有权与生命周期机制
所有权三原则
- 每个值有唯一所有者
- 值在任一时刻只能有一个所有者
- 离开作用域自动释放
所有权转移示例
let s1 = String::from("hello");
let s2 = s1; // s1 所有权转移至 s2
// println!("{}", s1); // 编译错误
借用机制
| 类型 | 语法 | 并发规则 |
|---|---|---|
| 不可变借用 | &T | 允许多个同时存在 |
| 可变借用 | &mut T | 独占访问,不能与其他引用共存 |
生命周期标注
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
三、&'a str 参数深度解析
类型组成结构
&'a str
&:引用符号'a:生命周期参数str:字符串切片类型
生命周期关联示例
fn example<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
实际应用场景
fn main() {
let s1 = String::from("long");
let result;
{
let s2 = String::from("short");
result = example(&s1, &s2); // 'a 推断为s2的生命周期
println!("{}", result); // 有效
}
// println!("{}", result); // 编译错误
}
内存安全保证
- 编译器自动推断最短生命周期
- 防止悬垂引用
- 无需运行时检查