跳转到内容

Rust 速查表

这是一个快速查阅的页面,用来查那些你不想为此重读整节课的内容。每一部分都附有链接,指向详细讲解它的那一页。

关键字 含义
let 声明变量(变量)
mut 让变量或引用变成可变的(变量)
const 声明常量(变量)
fn 声明函数(函数)
struct 声明结构体(结构体)
enum 声明枚举(枚举)
impl 为类型添加方法(结构体、trait)
trait 声明 trait(trait)
match 对一个值进行模式匹配(match)
if let / while let 只匹配一个模式(if let / while let)
loop / while / for 三种循环(循环、while、for)
break / continue 控制循环(break 与 continue)
mod 声明模块(模块)
pub 让项在模块外部也能访问(公有)(模块)
use 把路径引入作用域(模块)
unsafe 解锁裸指针和其他需要你自己保证安全的操作(Unsafe)
move 强制闭包获取所捕获值的所有权(并发)
& / &mut 借用 / 可变借用一个值(借用)
方法 作用
.len() 以字节为单位的长度
.trim() 去掉开头和结尾的空白字符
.to_uppercase() / .to_lowercase() 大小写转换
.contains(pat) 是否包含某个子串或模式
.replace(from, to) 替换所有匹配项
.push_str(s) 在末尾追加一个 &str
.push(c) 在末尾追加一个 char
.chars() 逐个字符遍历
.split(pat) 拆分成一个子串迭代器
.parse::<T>() 把文本转换成另一种类型(返回 Result)

详细说明和示例请看字符串一页。

方法 作用
.push(x) 添加到末尾
.pop() 移除并返回最后一个元素(Option)
.remove(i) 移除索引 i 处的元素
.len() 元素个数
.is_empty() vector 是否为空
.get(i) 安全的按索引访问(返回 Option,不会 panic)
.iter() 按引用遍历
.contains(&x) 是否包含某个值
.sort() 原地排序
.sort_by_key(|x| ...) 按某个字段或计算出的键排序
.dedup() 去掉相邻的重复元素(先排序)

详细说明和示例请看 vector、排序与查找和迭代器这几页。

类型 适合在你需要……
Vec<T> 一个有序、可增长的列表
HashMap<K, V> 按键快速查找值
HashSet<T> 不重复的元素,以及快速判断“它在不在里面”
BTreeMap<K, V> 按键排好序的键值对
VecDeque<T> 一个队列:两端都能放入和取出

详细说明和示例请看哈希 map 和 HashSet 与 BTreeMap 这两页。

方法 适用于 作用
.unwrap() 两者 取出值,遇到 None/Err 时 panic
.expect("msg") 两者 和 .unwrap() 一样,但可以自定义 panic 信息
.unwrap_or(default) 两者 取出值,或者使用一个备用值
.is_some() / .is_none() Option 检查是哪个变体
.is_ok() / .is_err() Result 检查是哪个变体
? 两者 遇到 None/Err 时提前返回

详细说明和示例请看 Option 和 Result 这两页。

格式化占位符(println!、format!)

Section titled “格式化占位符(println!、format!)”
占位符 打印出什么
{} 普通显示(需要实现 Display trait)
{:?} Debug 格式
{:#?} 美化排版的 Debug 格式
{:.2} 保留 2 位小数
{:5} 填充到宽度 5
{name} 直接嵌入名为 name 的变量

详细说明和示例请看输出一页。

命令 作用
cargo new name 创建新项目
cargo run 构建并运行
cargo check 快速检查错误,不生成可执行文件
cargo test 运行测试
cargo add crate 添加依赖
cargo fmt 格式化代码
cargo clippy 检查代码中的常见错误(lint)
cargo build --release 构建经过优化的可执行文件

详细说明和示例请看 Cargo 与 crate 一页。

语法 含义
1..5 从 1 到 5,不包括 5
1..=5 从 1 到 5,包括 5
..3 从开头到 3,不包括 3
2.. 从 2 到结尾
.. 全部

详细说明和示例请看 for 和 slice 这两页。

你需要…… crate 课程
JSON(以及其他格式) serde + serde_json 用 Serde 处理 JSON
异步代码、定时器、网络 tokio async/await
命令行界面 clap 用 clap 编写命令行工具
轻松处理错误 anyhow、thiserror anyhow 与 thiserror
随机数 rand 随机数
正则表达式 regex 正则表达式
日期和时间 chrono 日期与时间
日志 log + env_logger、tracing 日志
Web 服务器 axum 用 Axum 编写 Web API

这些 crate 都可以用 cargo add <crate> 添加。怎样挑选一个好的 crate,请看 Cargo 与 crate。