语法索引
本附录提供了 token 和常见形式的索引,带有指向定义这些元素位置的链接。
关键字
运算符和标点符号
| 符号 | 名称 | 使用 |
|---|---|---|
+ | 加号 | 加法、trait 约束、宏 Kleene 匹配器 |
- | 减号 | 减法、取反 |
* | 星号 | 乘法、解引用、原始指针、宏 Kleene 匹配器、glob 导入 |
/ | 斜线 | 除法 |
% | 百分号 | 取余 |
^ | 脱字符 | 按位与逻辑 XOR |
! | 非 | 按位与逻辑 NOT、宏调用、内部属性、never 类型、否定 impl |
& | 与 | 按位与逻辑 AND、借用、引用、引用模式 |
| | 或 | 按位与逻辑 OR、闭包、或模式、if let、while let |
&& | 与与 | 惰性 AND、借用、引用、引用模式 |
|| | 或或 | 惰性 OR、闭包 |
<< | 左移 | 左移、嵌套泛型 |
>> | 右移 | 右移、嵌套泛型 |
+= | 加等 | 加法赋值 |
-= | 减等 | 减法赋值 |
*= | 星等 | 乘法赋值 |
/= | 斜等 | 除法赋值 |
%= | 百分等 | 取余赋值 |
^= | 脱字符等 | 按位 XOR 赋值 |
&= | 与等 | 按位 AND 赋值 |
|= | 或等 | 按位 OR 赋值 |
<<= | 左移等 | 左移赋值 |
>>= | 右移等 | 右移赋值、嵌套泛型 |
= | 等 | 赋值、let 语句、属性、各种类型定义 |
== | 等等 | 相等 |
!= | 不等 | 不等于 |
> | 大于 | 大于、泛型、路径、use 约束 |
< | 小于 | 小于、泛型、路径、use 约束 |
>= | 大于等于 | 大于或等于、泛型 |
<= | 小于等于 | 小于或等于 |
@ | At | 子模式绑定 |
. | 点 | 字段访问、元组索引、方法调用、await 表达式 |
.. | 点点 | 范围表达式、结构体表达式、rest 模式、范围模式、结构体模式 |
... | 点点点 | 可变参数函数、范围模式 |
..= | 点点等 | 包含范围表达式、范围模式 |
, | 逗号 | 各种分隔符 |
; | 分号 | 各种项和语句的终止符、数组表达式、数组类型 |
: | 冒号 | 各种分隔符 |
:: | 路径分隔符 | 路径分隔符 |
-> | 右箭头 | 函数、闭包、函数指针类型 |
=> | 胖箭头 | match 分支、宏 |
<- | 左箭头 | 左箭头符号自 Rust 1.0 之前就一直未使用,但仍被视为单个 token。 |
# | 井号 | 属性、原始字符串字面量、原始字节字符串字面量、原始 C 字符串字面量 |
$ | 美元 | 宏 |
? | 问号 | try 传播表达式、放宽 trait 约束、宏 Kleene 匹配器 |
~ | 波浪号 | 波浪号运算符自 Rust 1.0 之前就一直未使用,但其 token 仍可使用。 |
注释
其他 token
| Token | 使用 |
|---|---|
ident | 标识符 |
r#ident | 原始标识符 |
'ident | 生命周期和循环标签 |
'r#ident | 原始生命周期和循环标签 |
…u8、…i32、…f64、…usize、… | 数字字面量 |
"…" | 字符串字面量 |
r"…"、r#"…"#、r##"…"##、… | 原始字符串字面量 |
b"…" | 字节字符串字面量 |
br"…"、br#"…"#、br##"…"##、… | 原始字节字符串字面量 |
'…' | 字符字面量 |
b'…' | 字节字面量 |
c"…" | C 字符串字面量 |
cr"…"、cr#"…"#、cr##"…"##、… | 原始 C 字符串字面量 |
宏
属性
表达式
| 表达式 | 使用 |
|---|---|
|…| expr|…| -> Type { … } | 闭包 |
ident::… | 路径 |
::crate_name::… | 显式 crate 路径 |
crate::… | crate 相对路径 |
self::… | 模块相对路径 |
super::… | 父模块路径 |
Type::…<Type as Trait>::ident | 关联项 |
<Type>::… | 限定路径,可用于没有名称的类型,如 <&T>::…、<[T]>::… 等。 |
Trait::method(…)Type::method(…)<Type as Trait>::method(…) | 消歧方法调用 |
method::<…>(…)path::<…> | 泛型参数,又名 turbofish |
() | 单元 |
(expr) | 括号表达式 |
(expr,) | 单元素元组表达式 |
(expr, …) | 元组表达式 |
expr(expr, …) | 调用表达式 |
expr.0、expr.1、… | 元组索引表达式 |
expr.ident | 字段访问表达式 |
{…} | 块表达式 |
Type {…} | 结构体表达式 |
Type(…) | 元组结构体构造函数 |
[…] | 数组表达式 |
[expr; len] | 重复数组表达式 |
expr[..]、expr[a..]、expr[..b]、expr[a..b]、expr[a..=b]、expr[..=b] | 数组和切片索引表达式 |
if expr {…} else {…} | if 表达式 |
match expr { pattern => {…} } | match 表达式 |
loop {…} | 无限循环表达式 |
while expr {…} | 谓词循环表达式 |
for pattern in expr {…} | 迭代器循环 |
&expr&mut expr | 借用表达式 |
&raw const expr&raw mut expr | 原始借用表达式 |
*expr | 解引用表达式 |
expr? | try 传播表达式 |
-expr | 取反表达式 |
!expr | 按位与逻辑 NOT 表达式 |
expr as Type | 类型强制转换表达式 |
项
程序项 是 crate 的组成部分。
| 项 | 使用 |
|---|---|
mod ident;mod ident {…} | 模块 |
use path; | use 声明 |
fn ident(…) {…} | 函数 |
type Type = Type; | 类型别名 |
struct ident {…} | 结构体 |
enum ident {…} | 枚举 |
union ident {…} | 联合体 |
trait ident {…} | trait |
impl Type {…}impl Type for Trait {…} | 实现 |
const ident = expr; | 常量项 |
static ident = expr; | 静态项 |
extern "C" {…} | 外部块 |
fn ident<…>(…) …struct ident<…> {…}enum ident<…> {…}impl<…> Type<…> {…} | 泛型定义 |
类型表达式
类型表达式 用于引用类型。
| 类型 | 使用 |
|---|---|
bool、u8、f64、str、… | 原始类型 |
for<…> | 高阶 trait 约束 |
T: TraitA + TraitB | trait 约束 |
T: 'a + 'b | 生命周期约束 |
T: TraitA + 'a | trait 和生命周期约束 |
T: ?Sized | 放宽 trait 约束 |
[Type; len] | 数组类型 |
(Type, …) | 元组类型 |
[Type] | 切片类型 |
(Type) | 括号类型 |
impl Trait | impl trait 类型、匿名类型参数 |
dyn Trait | trait 对象类型 |
identident::… | 类型路径(可以引用结构体、枚举、联合体、类型别名、trait、泛型等) |
Type<…>Trait<…> | 泛型参数(例如 Vec<u8>) |
Trait<ident = Type> | 关联类型绑定(例如 Iterator<Item = T>) |
Trait<ident: …> | 关联类型约束(例如 Iterator<Item: Send>) |
&Type&mut Type | 引用类型 |
*mut Type*const Type | 原始指针类型 |
fn(…) -> Type | 函数指针类型 |
_ | 推断类型、推断常量 |
'_ | 占位生命周期 |
! | never 类型 |
模式
模式 用于匹配值。