Rust 语法与关键字字典:含语言关键字与等价惯用法(如 ? 运算符、生命周期)。
1. let / let mut / const
描述
绑定默认不可变;mut 开可变;const 编译期需标类型。
语法和示例
let x = 5;
let mut y = 0; y += 1;
const MAX: u32 = 100;
static NAME: &str = "app"; // 程序级静态
let shadowed = 5;
let shadowed = shadowed * 2; // 遮蔽可换类型2. fn – 函数
描述
snake_case;参数模式匹配;返回值即尾表达式或 return。
语法和示例
fn add(a: i32, b: i32) -> i32 { a + b }
fn no_return() {} // 隐式返回 ()
fn never() -> ! { loop {} } // 永不返回
fn swap((a, b): (i32, i32)) -> (i32, i32) { (b, a) }
fn generic<T: Clone>(x: T) -> T { x.clone() }3. struct / impl
描述
具名结构体;impl 块加方法;关联函数(无 self)像静态方法。
语法和示例
struct User { name: String, age: u8 }
impl User {
fn new(name: impl Into<String>) -> Self { // 关联函数
Self { name: name.into(), age: 0 }
}
fn birthday(&mut self) { self.age += 1; } // &mut self
fn name(&self) -> &str { &self.name }
}
let mut u = User::new("Li");
u.birthday();4. enum / match
描述
代数数据类型;match 穷尽;match 必须覆盖全部或 _。
语法和示例
enum Msg {
Quit,
Move { x: i32, y: i32 },
Write(String),
}
let n = match msg {
Msg::Quit => 0,
Msg::Move { x, y } => x + y,
Msg::Write(s) if s.len() > 5 => 1, // 守卫
Msg::Write(_) => 2,
};5. Option – 可选值
描述
Some/None; unwrap_or 家族与 ? 传播。
语法和示例
let v: Option<i32> = Some(5);
v.unwrap(); // None 崩
v.unwrap_or(0); v.unwrap_or_default();
v.map(|x| x * 2);
v.ok_or("缺值")?; // 转 Result 再传播
if let Some(x) = v { }
let Some(x) = v else { return; };6. Result 与 ?
描述
? 自动 return Err 并 From 转换;链式调用的基石。
语法和示例
fn read(p: &str) -> Result<String, std::io::Error> {
std::fs::read_to_string(p) // 直接返回
}
let s = read("a")?;
// main 也可返回 Result:
fn main() -> Result<(), Box<dyn std::error::Error>> {
let s = read("a")?; Ok(())
}7. trait – 特征
描述
共享行为契约;默认实现;derive 派生常用 trait。
语法和示例
trait Speak { fn say(&self) -> String; }
impl Speak for Dog {
fn say(&self) -> String { "woof".into() }
}
#[derive(Debug, Clone, PartialEq, Default)]
struct P { x: i32 }
// Display 手写后可 to_string()
impl std::fmt::Display for P {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "P({})", self.x)
}
}8. 泛型与 impl Trait
描述
静态单态化 vs dyn 动态分发;语法糖 impl T。
语法和示例
fn show<T: Speak>(x: &T) {} // 泛型(静态)
fn show2(x: &dyn Speak) {} // trait 对象(动态)
fn show3(x: impl Speak) {} // 糖
fn make() -> impl Iterator<Item=i32> { (0..3).map(|x| x * 2) }9. 生命周期 ‘a
描述
标注引用存活关系;三条省略规则覆盖多数;struct 持引用必须标。
语法和示例
fn longest<'a>(a: &'a str, b: &'a str) -> &'a str {
if a.len() > b.len() { a } else { b }
}
struct Parsed<'a> { src: &'a str }
impl<'a> Parsed<'a> { fn new(s: &'a str) -> Self { Self { src: s } } }
// 'static:整程序存活(字符串字面量)10. 闭包
描述
三类 trait(Fn/FnMut/FnOnce);move 夺取所有权。
语法和示例
let g = "hi".to_string();
let take = move || println!("{g}"); // g 移入
let add = |a: i32, b: i32| a + b;
let mut count = 0;
let mut incr = || count += 1; // FnMut 捕获可变11. 所有权转移与借用
描述
= 与传参默认 move;&/&mut 借用规则;Copy 例外。
语法和示例
let s1 = String::from("hi");
let s2 = s1; // s1 失效
let r1 = &s2; let r2 = &s2; // 多个不可变 OK
// let m = &mut s2; // 与 r1 冲突
let n = 5; let m = n; // i32 Copy:都可用12. unsafe 边界
描述
裸指针解引用、unsafe fn 调用、static mut、union——包安全 API 在内。
语法和示例
let raw = &x as *const i32;
unsafe { println!("{}", *raw); }
unsafe fn legacy() {}
unsafe { legacy() }
// extern "C" fn export() {} // FFI 暴露13. 宏
描述
macro_rules 声明宏;derive 过程宏;常用内置宏清单。
语法和示例
vec![1, 2, 3]; println!("{}", x); format!("{:.2}", v);
assert_eq!(a, b); dbg!(&x); todo!(); unimplemented!();
matches!(x, Some(_));
write!(f, "text")?;