Rust 词条(246 条)
关键字
as在表达式里把值强制转换成另一种类型,像把一种证件临时换成另一种用,但可能丢失信息。
async把函数或代码块标记成异步任务,调用时先返回一个待执行的 Future,不会立刻跑里面的代码。
await在 async 上下文中暂停并等待一个 Future 完成,拿到结果后再继续往下执行。
break立刻跳出当前循环,像从旋转门里直接推门出去。
const编译期就钉死的常量,像印在试卷页眉上的考试科目,整场考试不能改。
continue跳过本次循环剩下的部分,直接进下一轮,像点名时跳过请假的人。
crate指代当前 crate(整个项目包)的根路径,用来从根目录定位本包内的模块或项。
dyn把 Trait 当作动态分发的对象类型使用,运行时才确定具体是哪种实现类型。
elseif 不成立时的备选路线,像 Plan A 失败就执行 Plan B。
enum一个变量只能选几种形态之一,像快递单状态只能是“待揽收/运输中/已签收”。
extern声明外部 ABI(应用程序二进制接口)或外部函数,用来和 Rust 以外的代码(如 C)打交道。
falsebool 类型的两个字面量之一,表示逻辑假,与 true 相对。
fn给一段操作起名字并规定入口,像餐厅给一道菜定菜单名、配料清单和做法。
for把容器里的元素挨个过一遍手,像食堂阿姨按名单给学生每人打一勺菜。
if条件成立才执行,像红绿灯:只有绿灯亮了才过马路。
impl给类型加装具体方法或能力,像给手机装上能用的 App。
infor 循环的组成部分,放在迭代对象前面,表示从哪个集合里依次取元素。
let给值贴个名字标签,默认贴死后不能撕下来重贴。
loop没有条件、一直转圈的循环,像跑步机;必须手动按 stop(break)才能下来。
match像分拣快递:根据包裹上的地址标签投进对应格口,且必须所有格口都考虑到。
mod把代码分进不同的房间,像图书馆按类别分书架。
move把外部变量的所有权整个搬进闭包,像把家里的家具全部搬进出租房,原房不能再住。
mut可变许可证,给贴死的名字标签打开一道换内容的口子,像把封存的档案改为可编辑。
pub把门打开让外部也能看见和使用,像把私家菜馆的招牌挂到街边。
ref在模式匹配里只借一个引用,不拿走原值,像复印件留底、原件还你。
return把函数里的结果送回调用处,并结束当前函数,像快递员把包裹交回站点。
self方法接收者的占位符,小写 self 表示“当前实例”,让方法能访问对象自己的数据。
Self大写 Self 是 impl 块中当前类型的别名,避免重复写类型名,也常用于返回自身。
static声明一个具有 'static 生命周期的全局变量,程序从启动到结束一直存在。
struct把几个字段打包成一个新类型,像填一张固定格式的登记表。
super指代当前模块的父模块,用来向上走一层引用路径。
trait定义一组能力规范,像招聘启事里写的“必须会开车、会用电脑”。
truebool 类型的两个字面量之一,表示逻辑真,与 false 相对。
type给已有类型起一个别名,让长类型名变短,或让代码语义更清晰;别名和原类型完全等价。
unsafe标记一段编译器无法完全验证安全性的代码,由程序员自己保证内存安全和行为正确。
use把远处的名字拉到当前作用域,像把常用工具放到手边的抽屉。
where给泛型参数附加约束条件,让约束集中写在签名后面,复杂约束时更易读。
while只要条件还成立就反复跑,像洗衣机检测到衣服还湿就继续甩干。
union定义一种 C 风格联合体,所有字段共享同一块内存,同一时间只能安全地读最近一次写入的字段。
abstract保留关键字,当前 Rust 尚未赋予实际含义,不能用作标识符,写出来会编译报错。
become保留关键字,当前 Rust 尚未赋予实际含义,不能用作标识符。
box保留关键字,对应旧语法中的装箱表达式;现代 Rust 用 Box::new 在堆上分配数据。
do保留关键字,当前 Rust 尚未赋予实际含义,不能用作标识符。
final保留关键字,当前 Rust 尚未赋予实际含义,不能用作标识符。
macro保留关键字,当前 Rust 尚未赋予实际含义;定义宏应使用 macro_rules! 或 proc-macro。
override保留关键字,当前 Rust 尚未赋予实际含义,不能用作标识符。
priv保留关键字,当前 Rust 尚未赋予实际含义;可见性默认私有,对外公开用 pub。
try保留关键字,当前 Rust 尚未启用 try 块关键字;错误处理目前用 Result 配合 ? 运算符。
typeof保留关键字,当前 Rust 尚未提供 typeof 表达式;类型多靠编译器推断或显式标注。
unsized保留关键字,当前 Rust 尚未赋予实际含义;表示大小在编译期不确定的类型用 ?Sized 等机制。
virtual保留关键字,当前 Rust 尚未赋予实际含义;Rust 通过 Trait 和 dyn Trait 实现多态。
yield保留关键字,当前 Rust 尚未启用 yield 表达式;与生成器相关功能仍在发展中。
宏
println!把格式化的文本打印到屏幕并换行,像自动换页的打字机。
print!把格式化的文本打印到标准输出,不带换行,常与 println! 配合拼同一行输出。
eprintln!把格式化的文本打印到标准错误流并换行,适合输出错误、日志或诊断信息。
format!按格式字符串把参数拼成一个 String 并返回,只生成字符串不打印。
vec!快速创建一个拥有所有权的 Vec<T>,是 vec![1,2,3] 这种写法的幕后推手。
panic!让程序立即终止并抛出 panic,表示遇到了无法恢复或不该出现的错误状态。
assert!断言一个布尔条件为真;如果为假,程序 panic 并打印位置,是测试和调试的安检门。
assert_eq!断言两个值相等;不等就 panic,测试里用来验证左右两边结果一致。
assert_ne!断言两个值不相等;相等就 panic,是 assert_eq! 的反面。
dbg!把表达式的值连带源码位置一起打印到标准错误,调试时不用手写 println!。
todo!标记这段逻辑还没实现,调用它会让程序 panic,提示此处待完成。
unimplemented!标记某个功能尚未实现,调用时 panic,常用于 Trait 方法占位。
unreachable!告诉编译器这一分支绝对走不到;如果真的走到了,说明程序有 bug,会 panic。
matches!判断一个值是否匹配某个模式,返回 true 或 false,不需要写完整的 match。
env!在编译期读取指定名称的环境变量,常用于获取 Cargo 包名、版本等构建信息。
concat!在编译期把多个字符串字面量拼接成一个静态字符串,不产生运行时开销。
stringify!在编译期把一段 Rust 代码原样转换成字符串字面量,常用于宏内部输出代码片段。
cfg!在编译期检查当前构建配置条件,返回 bool,用于写跨平台或条件分支代码。
常用类型
i88 位有符号整数类型,取值范围 -128 到 127,适合存储小整数或字节级带符号数据。
i1616 位有符号整数类型,取值范围约 -32768 到 32767。
i3232 位有符号整数类型,Rust 的默认整数类型,日常计算最常用。
i6464 位有符号整数类型,能存大约 -9×10¹⁸ 到 9×10¹⁸ 的数。
i128128 位有符号整数类型,能存极大或极小的整数,一般大数据或密码学才用。
isize有符号整数类型,大小由目标平台决定:32 位系统占 4 字节,64 位系统占 8 字节。
u88 位无符号整数类型,只能存 0 到 255 的非负数,是最常用的字节类型。
u1616 位无符号整数类型,取值范围 0 到 65535。
u3232 位无符号整数类型,取值范围 0 到约 42 亿,常用于计数、ID 等。
u6464 位无符号整数类型,取值范围 0 到约 1.8×10¹⁹。
u128128 位无符号整数类型,能存 0 到约 3.4×10³⁸ 的正整数。
usize无符号整数类型,大小由目标平台决定,专门用于索引、长度和内存大小。
f3232 位单精度浮点数类型,精度约 6 到 7 位有效数字,比 f64 省内存。
f6464 位双精度浮点数类型,Rust 的默认浮点类型,精度约 15 到 17 位有效数字。
bool布尔类型,只有两个值 true 和 false,用于条件判断和逻辑运算。
char单个 Unicode 标量值,用单引号包裹,可以表示任意 Unicode 字符。
strUTF-8 字符串切片类型,通常以不可变引用 &str 形式出现,指向一段有效 UTF-8 字节。
String堆上分配的可变字符串类型,拥有数据所有权,能动态增长和修改。
Vec可变长度的数组列表,像能自动伸长的公交调度队列,来一辆车就排后面。
HashMap基于哈希表实现的键值对容器,用键快速查找、插入和删除对应的值。
HashSet基于哈希表实现的无序集合,里面每个值最多出现一次,自动去重。
Option表示一个值可能存在也可能不存在,像快递柜:要么有包裹(Some),要么是空柜(None)。
Result表示操作可能成功也可能失败,像考试结果:要么及格(Ok),要么不及格(Err)。
Box把数据装箱放到堆上,像把大件家具存进仓库,手里只留提货单。
Rc单线程下的引用计数智能指针,让一份数据被多个所有者共享,计数归零时释放。
Arc多线程安全的引用计数智能指针,是 Rc 的线程安全版本,可在多个线程间共享所有权。
Cell单线程下的内部可变性容器,允许在拥有不可变引用时修改里面的值。
RefCell单线程下的运行时借用检查容器,把编译期借用规则检查推迟到运行时,违反会 panic。
Mutex互斥锁,保护数据在同一时刻只被一个线程访问,防止数据竞争。
SomeOption 的“有值”变体,像快递柜里确实有包裹。
NoneOption 的“空”变体,像打开快递柜发现里面什么都没有。
OkResult 的成功变体,像考试结果单上盖的“通过”章。
ErrResult 的失败变体,像考试结果单上写的“不及格原因”。
常用Trait
Iterator迭代器 Trait,实现它就能依次产生值,是 for 循环和迭代器方法链的基础。
IntoIterator可转换为迭代器的 Trait;for 循环背后就是调用目标类型的 into_iter()。
From安全转换 Trait,表示可以从另一种类型无损失地构造自己;是 Into 的反向。
Into安全转换 Trait,表示可以把自己转换成另一种类型;常由目标类型是 String 或 Vec 等函数参数触发。
Display标准格式化 Trait,实现后就能用 println!("{}", x) 以人类可读形式输出。
Debug调试格式化 Trait,实现后就能用 println!("{:?}", x) 快速查看内部结构。
Clone显式深拷贝 Trait,调用 .clone() 会复制一份独立的数据;对 Rc/Arc 只是增加引用计数。
Copy标记类型可以按位安全复制;赋值后原变量仍然可用,不需要转移所有权。
Default提供默认值的 Trait,调用 T::default() 可以得到该类型的“空”或“零”状态。
Drop析构 Trait,变量离开作用域时自动调用 drop(),用于释放资源、关闭句柄等清理工作。
PartialEq部分相等 Trait,实现后可以用 == 和 != 比较;允许存在无法比较相等的值(如 NaN)。
Eq完全相等 Trait,继承自 PartialEq,要求相等关系满足自反、对称、传递。
PartialOrd部分排序 Trait,实现后可以用 <、>、<=、>= 比较大小;允许存在不可比的值。
Ord完全排序 Trait,继承自 Eq 和 PartialOrd,要求任意两个值都能比出大小。
Fn闭包 Trait 之一,表示闭包可以多次调用,且捕获环境的方式是不可变借用。
FnMut闭包 Trait 之一,表示闭包可以多次调用,但可以修改捕获的变量(可变借用)。
FnOnce闭包 Trait 之一,表示闭包可能只调用一次,因为它可能把捕获的变量所有权消耗掉。
AsRef廉价借用转换 Trait,把类型转换成另一种类型的引用,常用于让函数接受多种相似类型。
Deref解引用 Trait,实现后可以让自定义类型像引用一样用 * 访问,并支持自动解引用调用方法。
Send线程间安全转移所有权的标记 Trait;实现 Send 的类型可以安全地把所有权移动到另一个线程。
Sync线程间安全共享引用的标记 Trait;实现 Sync 的类型可以被多个线程同时通过引用访问。
常用路径
stdRust 标准库的根模块,提供语言核心之外最常用的类型、Trait 和工具函数。
std::io标准库的输入输出模块,提供读写流、标准输入输出/错误以及错误类型。
std::fs标准库的文件系统模块,封装了打开、读取、写入、删除文件和目录等操作系统接口。
std::env标准库的运行环境模块,用来读取命令行参数、环境变量和当前工作目录等。
std::process标准库的进程管理模块,可启动子进程、等待退出、获取输出或终止当前进程。
std::thread标准库的线程模块,提供创建原生线程、等待线程结束和本地存储等能力。
std::time标准库的时间模块,提供 Duration、Instant 等类型,用于计时和让线程休眠。
std::collections标准库的集合模块,提供 HashMap、HashSet、BTreeMap、BTreeSet、VecDeque 等容器。
File::open以只读方式打开一个已存在的文件,成功返回 Ok(File),失败返回 Err。
File::create创建一个新文件用于写入;如果文件已存在,会截断(清空)原有内容。
常用方法
new很多类型提供的构造函数,返回一个空的或默认初始化的新实例。
push在 Vec 的末尾追加一个元素;如果容量不够会自动扩容。
pop移除并返回 Vec 的最后一个元素;如果向量为空则返回 None。
len返回容器中当前元素的数量。
is_empty检查容器是否不包含任何元素,返回 true 或 false。
get按索引或键取值,返回 Option;越界或键不存在时返回 None,不会 panic。
insert向容器里插入内容:HashMap 插入键值对,Vec 在指定索引前插入元素。
remove按索引或键删除内容:Vec 删除索引处元素,HashMap 删除键值对。
contains_key检查 HashMap 或 BTreeMap 中是否包含某个键,返回 bool。
iter返回一个不可变引用的迭代器,让你逐个访问元素而不消耗原容器。
map对迭代器中的每个元素进行映射转换,返回新的迭代器,不改原数据。
filter按条件过滤迭代器中的元素,只保留使闭包返回 true 的元素。
collect把一个迭代器消费掉,把产生的元素收集成指定的集合类型(如 Vec、HashMap)。
fold把迭代器的所有元素归约成一个值,从左到右依次用累加器处理每个元素。
for_each对迭代器中的每个元素执行一个副作用操作,不返回新集合。
enumerate把迭代器变成(索引,元素)对的迭代器,遍历时同时拿到位置和值。
zip把两个迭代器按位置一一配对,像拉链一样合成一个元组迭代器。
take只取迭代器的前 n 个元素,后面的全部丢弃。
skip跳过迭代器的前 n 个元素,返回从第 n+1 个开始的剩余迭代器。
find返回迭代器中第一个满足条件的元素;如果没有则返回 None。
any检查迭代器中是否存在至少一个元素满足条件,存在返回 true。
all检查迭代器中是否所有元素都满足条件,全部满足返回 true。
sum把迭代器中的数字全部相加,返回总和。
min返回迭代器中的最小值;空迭代器返回 None。
max返回迭代器中的最大值;空迭代器返回 None。
clone调用 Clone trait 的 clone 方法,显式复制一份数据;对 Rc/Arc 只是增加引用计数。
to_string把实现了 Display 的类型转换成 String,是最常见的“转字符串”方法。
to_owned把借用的数据克隆成拥有所有权的版本,最常用的场景是 &str → String。
parse把字符串解析成另一种类型,解析失败返回 Result,常用于字符串转数字。
unwrap从 Option 或 Result 中取出值;如果是 None 或 Err 就立即 panic。
expect和 unwrap 一样取出值,但失败时 panic 信息会附带你写的提示文本。
unwrap_or从 Option 或 Result 中取成功值,失败时返回你指定的默认值。
unwrap_or_default从 Option 或 Result 中取成功值,失败时返回该类型的 Default 默认值。
ok把 Result<T, E> 转成 Option<T>:Ok 变成 Some,Err 变成 None。
err把 Result<T, E> 转成 Option<E>:Err 变成 Some,Ok 变成 None。
is_some检查 Option 是否是 Some 变体,返回 true 或 false。
is_none检查 Option 是否是 None 变体,返回 true 或 false。
is_ok检查 Result 是否是 Ok 变体,返回 true 或 false。
is_err检查 Result 是否是 Err 变体,返回 true 或 false。
and_then当 Option/Result 是成功值时,用闭包继续加工;失败时保持失败不变。
map_err当 Result 是 Err 时,把错误值映射成另一种类型;Ok 保持不变。
chars返回字符串中每个 char 的迭代器,按 Unicode 标量值逐个遍历。
lines按行拆分字符串,返回每行内容的迭代器,自动去掉换行符。
split按指定分隔符把字符串切分成多个子串,返回迭代器。
trim去掉字符串首尾的 Unicode 空白字符(空格、制表符、换行等),返回新的 &str。
to_uppercase把字符串中的字符全部转换成大写形式,返回新的 String。
to_lowercase把字符串中的字符全部转换成小写形式,返回新的 String。
replace把字符串中所有匹配的子串替换成另一个子串,返回新的 String。
contains检查字符串是否包含某个子串,或 Vec/切片是否包含某个元素,返回 bool。
starts_with检查字符串是否以指定的前缀开头,返回 bool。
ends_with检查字符串是否以指定的后缀结尾,返回 bool。
read_to_string一次性读取指定路径的文件全部内容,并返回 String;文件必须是有效 UTF-8。
args返回命令行参数的迭代器,第一个元素是程序本身,后面是用户传入的参数。
运算符
=赋值运算符,把右边的值写进左边已经存在的可变变量。
==相等比较运算符,两边值相等返回 true;类型实现 PartialEq 就能用。
!=不等比较运算符,两边值不等返回 true;是 == 的反面。
<小于比较运算符,左边小于右边返回 true。
>大于比较运算符,左边大于右边返回 true。
<=小于或等于比较运算符,左边小于等于右边返回 true。
>=大于或等于比较运算符,左边大于等于右边返回 true。
+加法运算符;数字相加,String + &str 可拼接字符串,String + String 不能直接拼。
-减法运算符;也用作一元负号表示负数。
*乘法运算符;也用作一元解引用运算符 *x。
/除法运算符;整数相除会截断小数部分,向零取整。
%取模/取余运算符,返回除法的余数。
+=复合赋值运算符,先把变量和右值相加,再把结果赋给变量。
-=复合赋值运算符,先把变量和右值相减,再把结果赋给变量。
*=复合赋值运算符,先把变量和右值相乘,再把结果赋给变量。
/=复合赋值运算符,先把变量和右值相除,再把结果赋给变量。
%=复合赋值运算符,先把变量和右值取余,再把结果赋给变量。
&&逻辑与运算符,只有两边都为 true 时结果才为 true;左边为 false 时短路。
||逻辑或运算符,只要有一边为 true 结果就为 true;左边为 true 时短路。
!逻辑非/按位非运算符:对 bool 取反;对整数按位取反。
&一元 & 表示借用引用;两个整数之间的 & 是按位与。
|闭包参数分隔符;两个整数之间的 | 是按位或。
^按位异或运算符,两个位相同得 0,不同得 1。
<<按位左移运算符,把所有位向左移动,右侧补 0。
>>按位右移运算符,把所有位向右移动;无符号数补 0,有符号负数按符号位补。
<<=左移复合赋值运算符,先左移再赋值给变量。
>>=右移复合赋值运算符,先右移再赋值给变量。
&=按位与复合赋值运算符,先按位与再赋值给变量。
|=按位或复合赋值运算符,先按位或再赋值给变量。
^=按位异或复合赋值运算符,先按位异或再赋值给变量。
?错误传播运算符;当 Result/Option 是 Err/None 时提前返回,否则解包成功值。
..构造一个左闭右开的范围,包含起点但不包含终点,常用于 for 循环和切片。
..=构造一个两端都包含的范围,即闭区间,常用于 match 模式和循环。
=>match 分支箭头,把左侧模式和右侧要执行的表达式连接起来。
->函数、闭包或 trait 方法的返回类型箭头,指向返回类型。
::路径分隔符,用于连接模块、类型、关联函数、常量和 Trait 方法等路径。
符号
;语句结束符,标记一条语句的结束;Rust 大多数语句末尾需要它。
,列表分隔符,用于分隔函数参数、数组元素、结构体字段、模式等。
.成员访问符,用于访问字段、调用方法,或浮点数小数点。
(左圆括号,用于包裹函数参数、元组、表达式分组或类型元组。
)右圆括号,和左圆括号配对使用。
[左方括号,用于数组/切片字面量和索引访问。
]右方括号,和左方括号配对使用。
{左花括号,表示代码块、函数体、控制流体或结构体初始化字面量的开始。
}右花括号,和左花括号配对,表示代码块或复合结构的结束。
@模式绑定符,在 match 模式里给匹配到的值起一个名字,同时继续匹配子模式。
通用兜底
字符串双引号字符串字面量,是一段 UTF-8 文本,类型通常是 &'static str。
数字数字字面量,包括整数和浮点数;未标注类型的整数默认推断为 i32,浮点默认 f64。
注释单行注释,从 // 到行尾的内容会被编译器忽略,用于代码说明。
块注释块注释,可以跨越多行,/* 和 */ 之间的内容会被编译器忽略。
变量变量绑定,用 let 关键字给值起一个名字,默认不可变,可变要加 mut。
函数调用函数调用,通过函数名加圆括号触发执行,传入参数必须匹配函数签名。
方法方法调用,某个类型实例上的函数,第一个参数通常是 self/&self/&mut self。
属性结构体字段或枚举变体附带的数据,用点号访问,是自定义类型的成员。
缩进代码缩进,用空格表示代码块的层级关系,让程序结构更清晰。
运算符运算符,对值进行算术、比较、逻辑、位运算等操作的符号。
生命周期生命周期标注,给引用指定有效范围,确保引用不会指向已释放的数据。
宏宏调用,以 ! 结尾,在编译期展开成其他代码,用于代码生成和 DSL。
装饰器属性(attribute),用 #[...] 给类型、函数、模块等添加元数据或编译器指令。
打开代码点读机,粘贴代码点词即查 →