02-语法索引
语法索引 — The Rust Reference
7 分钟阅读
译文 · 基于 The Rust Reference
语法索引
本附录提供 token 与常见形式的索引,并链接到这些元素的定义处。
关键字
运算符与标点
| 符号 | 名称 | 用途 |
|---|---|---|
+ | Plus | 加法、trait 约束、宏 Kleene matcher |
- | Minus | 减法、取反 |
* | Star | 乘法、解引用、裸指针、宏 Kleene matcher、glob 导入 |
/ | Slash | 除法 |
% | Percent | 取余 |
^ | Caret | 按位与逻辑 XOR |
! | Not | 按位与逻辑 NOT、宏调用、[内部属性][attributes]、永不类型、否定 impl |
& | And | 按位与逻辑 AND、借用、引用、引用模式 |
| | Or | 按位与逻辑 OR、闭包、或模式、if let、while let |
&& | AndAnd | 惰性 AND、借用、引用、引用模式 |
|| | OrOr | 惰性 OR、闭包 |
<< | Shl | 左移、嵌套泛型 |
>> | Shr | 右移、嵌套泛型 |
+= | PlusEq | 加法赋值 |
-= | MinusEq | 减法赋值 |
*= | StarEq | 乘法赋值 |
/= | SlashEq | 除法赋值 |
%= | PercentEq | 取余赋值 |
^= | CaretEq | 按位 XOR 赋值 |
&= | AndEq | 按位 AND 赋值 |
|= | OrEq | 按位 OR 赋值 |
<<= | ShlEq | 左移赋值 |
>>= | ShrEq | 右移赋值、嵌套泛型 |
= | Eq | 赋值、let 语句、[属性][attributes]、各种类型定义 |
== | EqEq | 等于 |
!= | Ne | 不等于 |
> | Gt | 大于、泛型、[路径][paths]、use 约束 |
< | Lt | 小于、泛型、[路径][paths]、use 约束 |
>= | Ge | 大于或等于、泛型 |
<= | Le | 小于或等于 |
@ | At | 子模式绑定 |
. | Dot | 字段访问、元组索引、方法调用、await 表达式 |
.. | DotDot | [范围表达式][expr.range]、结构体表达式、剩余模式、范围模式、结构体模式 |
... | DotDotDot | 可变参数函数、范围模式 |
..= | DotDotEq | [闭区间范围表达式][expr.range]、范围模式 |
, | Comma | 各种分隔符 |
; | Semi | 各种项与语句的终止符、数组表达式、数组类型 |
: | Colon | 各种分隔符 |
:: | PathSep | [路径分隔符][paths] |
-> | RArrow | 函数、闭包、函数指针类型 |
=> | FatArrow | match 分支、宏 |
<- | LArrow | 左箭头符号自 Rust 1.0 之前就未再使用,但仍被当作单个 token。 |
# | Pound | [属性][attributes]、原始字符串字面量、原始字节字符串字面量、原始 C 字符串字面量 |
$ | Dollar | 宏 |
? | Question | try 传播表达式、宽松 trait 约束、宏 Kleene matcher |
~ | Tilde | 波浪号运算符自 Rust 1.0 之前就未再使用,但其 token 仍可能被使用。 |
注释
| 注释 | 用途 |
|---|---|
// | [行注释][comments] |
//! | [内部行注释][comments] |
/// | [外部行文档注释][comments] |
/*…*/ | [块注释][comments] |
/*!…*/ | [内部块文档注释][comments] |
/**…*/ | [外部块文档注释][comments] |
其他 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 字符串字面量 |
宏
| 语法 | 用途 |
|---|---|
ident!(…)ident! {…}ident![…] | 宏调用 |
$ident | 宏元变量 |
$ident:kind | 宏 matcher fragment specifier |
$(…)… | 宏重复 |
属性
| 语法 | 用途 |
|---|---|
#[meta] | 外部属性 |
#![meta] | 内部属性 |
表达式
| 表达式 | 用途 |
|---|---|
|…| expr|…| -> Type { … } | 闭包 |
ident::… | [路径][paths] |
::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 | 类型强制转换表达式 |
项
[项][Items] 是 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 | 函数指针类型 |
_ | 推断的类型、推断的常量 |
'_ | 占位生命周期 |
! | 永不类型 |
模式
[模式][Patterns] 用于匹配值。
| 模式 | 用途 |
|---|---|
"foo", 'a', 123, 2.4, … | 字面量模式 |
ident | 标识符模式 |
_ | 通配符模式 |
.. | 剩余模式 |
a.., ..b, a..b, a..=b, ..=b | 范围模式 |
&pattern&mut pattern | 引用模式 |
path {…} | 结构体模式 |
path(…) | 元组结构体模式 |
(pattern, …) | 元组模式 |
(pattern) | 分组模式 |
[pattern, …] | 切片模式 |
CONST, Enum::Variant, … | 路径模式 |