Menu
CoddyTech

Rust 速查表

最后更新

Hello World 与程序结构

Rust 程序从 fn main 开始执行;语句以分号结尾。

操作语法
入口点fn main() { ... }
输出一行println!("Hello, World!");
输出带值的内容println!("{} is {}", name, age);
以调试格式输出println!("{:?}", value);
单行注释// comment
使用模块中的项use std::collections::HashMap;
编译并运行cargo run
编译发布版可执行文件cargo build --release

变量与类型(let / mut)

绑定默认不可变;加上 mut 才能重新赋值。

操作语法
不可变绑定let x = 5;
可变绑定let mut count = 0;
显式类型let age: u32 = 30;
常量const MAX: u32 = 100;
遮蔽(shadowing)let x = x + 1;
整数类型i32, u32, i64, usize
其他标量类型f64, bool, char
元组let pair: (i32, &str) = (1, "a");
类型转换let f = x as f64;

流程控制

if 是表达式,Rust 有三种循环写法。

操作语法
if / elseif x > 0 { ... } else { ... }
把 if 当作表达式let y = if x > 0 { 1 } else { -1 };
无限循环loop { ... }
带返回值的循环let v = loop { break 5; };
while 循环while x < 100 { ... }
for 遍历范围for i in 0..10 { ... }
for 遍历集合for item in &items { ... }
break / continuebreak;, continue;

函数

最后一个表达式(不带分号)就是返回值。

操作语法
基本函数fn add(a: i32, b: i32) -> i32 { a + b }
显式返回fn f() -> i32 { return 5; }
无返回值fn log(msg: &str) { ... }
接收引用fn len(s: &String) -> usize { s.len() }
闭包let add = |a, b| a + b;
带类型的闭包let sq = |x: i32| -> i32 { x * x };
函数作为参数fn apply(f: impl Fn(i32) -> i32) { ... }

所有权与借用

每个值只有一个所有者;引用可以借用它,而不获取所有权。

操作语法
移动(所有权转移)let b = a;(a 不再有效)
克隆(深拷贝)let b = a.clone();
不可变借用let r = &x;
可变借用let r = &mut x;
在函数中借用fn read(s: &String) { ... }
解引用*r
借用规则同一时间可以有多个 &,或者只有一个 &mut,两者不能并存
切片(借用一段范围)let part = &arr[1..3];

结构体与枚举

结构体把相关数据组合在一起;枚举表示一个值是几种变体之一。

操作语法
定义结构体struct Point { x: i32, y: i32 }
创建实例let p = Point { x: 1, y: 2 };
访问字段p.x
元组结构体struct Pair(i32, i32);
方法(impl 块)impl Point { fn dist(&self) -> f64 { ... } }
关联函数impl Point { fn new() -> Self { ... } }
定义枚举enum Shape { Circle(f64), Rect(f64, f64) }
带命名字段的枚举enum Msg { Move { x: i32, y: i32 } }
派生 trait#[derive(Debug, Clone)]

模式匹配(match)

match 把一个值和多个模式逐一比较,并且必须穷尽所有情况。

操作语法
匹配值match x { 1 => "one", _ => "other" }
匹配枚举match shape { Shape::Circle(r) => ... }
匹配范围match n { 1..=5 => ..., _ => ... }
绑定并加守卫条件match x { n if n > 0 => ... }
匹配元组match point { (0, y) => ..., (x, _) => ... }
if let(单个模式)if let Some(v) = opt { ... }
while letwhile let Some(v) = stack.pop() { ... }
解构结构体let Point { x, y } = p;

Trait 与泛型

trait 定义共享的行为;泛型让代码适用于多种类型。

操作语法
定义 traittrait Area { fn area(&self) -> f64; }
实现 traitimpl Area for Circle { fn area(&self) -> f64 { ... } }
默认方法trait Greet { fn hi(&self) { ... } }
泛型函数fn largest<T: PartialOrd>(list: &[T]) -> &T { ... }
泛型结构体struct Wrapper<T> { value: T }
trait 约束(where)fn f<T>(x: T) where T: Display { ... }
impl Trait 参数fn print(item: impl Display) { ... }
trait 对象let shapes: Vec<Box<dyn Area>> = ...;

错误处理(Result / Option)

Rust 用 Option 表示值可能不存在,用 Result 表示可恢复的错误。

操作语法
可选值Option<T>:Some(v) 或 None
Result 类型Result<T, E>:Ok(v) 或 Err(e)
返回 Resultfn read() -> Result<String, Error> { ... }
用 ? 向上传播let data = read()?;
unwrap(遇到 None/Err 会 panic)opt.unwrap()
默认值opt.unwrap_or(0)
映射值opt.map(|v| v + 1)
处理两种情况match res { Ok(v) => ..., Err(e) => ... }
把 Option 转成 Resultopt.ok_or("missing")?

常用集合(Vec / HashMap)

Vec 是可增长的数组;HashMap 是键值存储。

操作语法
创建向量let mut v: Vec<i32> = Vec::new();
向量字面量let v = vec![1, 2, 3];
push / popv.push(4);, v.pop();
按索引访问v[0]
安全访问v.get(0) 返回 Option<&T>
遍历for x in &v { ... }
长度v.len()
创建映射let mut m: HashMap<String, i32> = HashMap::new();
插入 / 获取m.insert(k, v);, m.get(&k)
Entry API*m.entry(k).or_insert(0) += 1;

最常用的 Rust 语法,全都在这一页。这份 Rust 速查表是核心语言的快速参考:变量和可变性、所有权和借用、结构体和枚举、模式匹配、trait 和泛型,以及 Rust 错误处理背后的 Result 和 Option 类型。

这里的内容都是标准 Rust,可以用较新的 stable 工具链编译。需要什么就复制什么,也可以在 Rust 在线编辑器里直接运行每个代码片段,无需安装 cargo。

Rust 速查表常见问题

这份 Rust 速查表免费吗?

免费。这份 Rust 速查表完全免费,无需注册。收藏起来,需要查 match 模式、trait 约束或集合方法时随时回来看。

Rust 中的所有权和借用是什么?
所有权是 Rust 的内存模型:每个值都恰好有一个所有者,所有者离开作用域时,这个值就会被释放。借用让你通过引用访问一个值,而不获取它的所有权:&x 是不可变借用,&mut x 是可变借用。编译器会强制执行一条规则:同一时间可以有多个不可变借用,或者只有一个可变借用,这样在编译阶段就能防止数据竞争。
Rust 中的 Result 和 Option 有什么区别?
Option<T> 表示一个可能不存在的值,它要么是 Some(v),要么是 None;没有错误需要报告、只是可能缺少值时用它。Result<T, E> 表示一个可能失败的操作,它要么是 Ok(v),要么是 Err(e),出错时会带上错误值。“可能没有”用 Option,“可能失败”用 Result;? 运算符对两者都能向上传播。
可以在线练习 Rust 吗?

可以。打开 Rust 在线编辑器,就能在浏览器里编译并运行这份速查表中的任何代码片段,无需安装 cargo 或工具链。想要系统学习的话,Coddy 的免费交互式 Rust 课程会带你从变量和所有权一步步学到 trait 和错误处理。

这份速查表适合初学者吗?

适合。内容从最常用的主题(变量、流程控制、函数)一直讲到进阶主题(trait、泛型、错误处理),第一天就能用上前面几部分,再慢慢掌握所有权和其余内容。

Coddy 编程语言插图

在 Coddy 学习 Rust

开始