|
|
@ -70,72 +70,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
### 非运算符符号
|
|
|
|
### 非运算符符号
|
|
|
|
|
|
|
|
|
|
|
|
下面的列表中包含了所有和运算符不一样功能的非字符符号;也就是说,他们并不像函数调用或方法调用一样表现。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表 B-2 展示了以其自身出现以及出现在合法其他各个地方的符号。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="caption">表 B-2:独立语法</span>
|
|
|
|
<span class="caption">表 B-2:独立语法</span>
|
|
|
|
|
|
|
|
|
|
|
|
| 符号 | 解释 |
|
|
|
|
| 符号 | 解释 |
|
|
|
|
|--------|-------------|
|
|
|
|
|--------|-------------|
|
|
|
|
| `'ident` | 命名生命周期或循环标签 |
|
|
|
|
| `'ident` | 生命周期名称或循环标签 |
|
|
|
|
| `...u8`, `...i32`, `...f64`, `...usize`, 等 | 指定类型的数值常量 |
|
|
|
|
| `...u8`, `...i32`, `...f64`, `...usize`, 等 | 指定类型的数值常量 |
|
|
|
|
| `"..."` | 字符串常量 |
|
|
|
|
| `"..."` | 字符串常量 |
|
|
|
|
| `r"..."`, `r#"..."#`, `r##"..."##`, etc. | 原始字符串字面值, 未处理的转义字符 |
|
|
|
|
| `r"..."`, `r#"..."#`, `r##"..."##`, etc. | 原生字符串, 未转义字符 |
|
|
|
|
| `b"..."` | 字节字符串字面值; 构造一个 `[u8]` 类型而非字符串 |
|
|
|
|
| `b"..."` | 字节字符串; 结果是一个 `[u8]` 类型而非`string`类型 |
|
|
|
|
| `br"..."`, `br#"..."#`, `br##"..."##`, 等 | 原始字节字符串字面值,原始和字节字符串字面值的结合 |
|
|
|
|
| `br"..."`, `br#"..."#`, `br##"..."##`, 等 | 原生字节字符串,原生和字节字符串字面值的结合 |
|
|
|
|
| `'...'` | 字符字面值 |
|
|
|
|
| `'...'` | Char字符 |
|
|
|
|
| `b'...'` | ASCII 码字节字面值 |
|
|
|
|
| `b'...'` | ASCII字节 |
|
|
|
|
| <code>|...| expr</code> | 闭包 |
|
|
|
|
| <code>|...| expr</code> | 闭包 |
|
|
|
|
| `!` | 离散函数的总是为空的类型 |
|
|
|
|
| `!` | 代表总是空的类型,用于发散函数(无返回值函数) |
|
|
|
|
| `_` | “忽略” 模式绑定;也用于增强整型字面值的可读性 |
|
|
|
|
| `_` | 模式绑定中表示忽略的意思;也用于增强整型字面值的可读性 |
|
|
|
|
|
|
|
|
|
|
|
|
表 B-3 展示了出现在从模块结构到项的路径上下文中的符号
|
|
|
|
表 B-3展示了模块和对象调用路径的语法。
|
|
|
|
|
|
|
|
|
|
|
|
<span class="caption">表 B-3:路径相关语法</span>
|
|
|
|
<span class="caption">表 B-3:路径相关语法</span>
|
|
|
|
|
|
|
|
|
|
|
|
| 符号 | 解释 |
|
|
|
|
| 符号 | 解释 |
|
|
|
|
|--------|-------------|
|
|
|
|
|--------|-------------|
|
|
|
|
| `ident::ident` | 命名空间路径 |
|
|
|
|
| `ident::ident` | 命名空间路径 |
|
|
|
|
| `::path` | 与 crate 根相对的路径(如一个显式绝对路径) |
|
|
|
|
| `::path` | 从当前的包的根路径开始的相对路径 |
|
|
|
|
| `self::path` | 与当前模块相对的路径(如一个显式相对路径)|
|
|
|
|
| `self::path` | 与当前模块相对的路径(如一个显式相对路径)|
|
|
|
|
| `super::path` | 与父模块相对的路径 |
|
|
|
|
| `super::path` | 与父模块相对的路径 |
|
|
|
|
| `type::ident`, `<type as trait>::ident` | 关联常量、函数以及类型 |
|
|
|
|
| `type::ident`, `<type as trait>::ident` | 关联常量、关联函数、关联类型 |
|
|
|
|
| `<type>::...` | 不可以被直接命名的关联项类型(如 `<&T>::...`,`<[T]>::...`, 等) |
|
|
|
|
| `<type>::...` | 不可以被直接命名的关联项类型(如 `<&T>::...`,`<[T]>::...`, 等) |
|
|
|
|
| `trait::method(...)` | 通过命名定义的 trait 来消除方法调用的二义性 |
|
|
|
|
| `trait::method(...)` | 使用特征名进行方法调用,以消除方法调用的二义性 |
|
|
|
|
| `type::method(...)` | 通过命名定义的类型来消除方法调用的二义性 |
|
|
|
|
| `type::method(...)` | 使用类型名进行方法调用, 以消除方法调用的二义性 |
|
|
|
|
| `<type as trait>::method(...)` | 通过命名 trait 和类型来消除方法调用的二义性 |
|
|
|
|
| `<type as trait>::method(...)` | 将类型转换为特征,再进行方法调用,以消除方法调用的二义性 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表 B-4 展示了出现在泛型类型参数上下文中的符号。
|
|
|
|
表 B-4 展示了使用泛型参数时用到的符号。
|
|
|
|
|
|
|
|
|
|
|
|
<span class="caption">表 B-4:泛型</span>
|
|
|
|
<span class="caption">表 B-4:泛型</span>
|
|
|
|
|
|
|
|
|
|
|
|
| 符号 | 解释 |
|
|
|
|
| 符号 | 解释 |
|
|
|
|
|--------|-------------|
|
|
|
|
|--------|-------------|
|
|
|
|
| `path<...>` | 为一个类型中的泛型指定具体参数(如 `Vec<u8>`) |
|
|
|
|
| `path<...>` | 为一个类型中的泛型指定具体参数(如 `Vec<u8>`) |
|
|
|
|
| `path::<...>`, `method::<...>` | 为一个泛型、函数或表达式中的方法指定具体参数,通常指 turbofish(如 `"42".parse::<i32>()`)|
|
|
|
|
| `path::<...>`, `method::<...>` | 为一个泛型、函数或表达式中的方法指定具体参数,通常指双冒号(turbofish)(如 `"42".parse::<i32>()`)|
|
|
|
|
| `fn ident<...> ...` | 泛型函数定义 |
|
|
|
|
| `fn ident<...> ...` | 泛型函数定义 |
|
|
|
|
| `struct ident<...> ...` | 泛型结构体定义 |
|
|
|
|
| `struct ident<...> ...` | 泛型结构体定义 |
|
|
|
|
| `enum ident<...> ...` | 泛型枚举定义 |
|
|
|
|
| `enum ident<...> ...` | 泛型枚举定义 |
|
|
|
|
| `impl<...> ...` | 定义泛型实现 |
|
|
|
|
| `impl<...> ...` | 实现泛型 |
|
|
|
|
| `for<...> type` | 高级生命周期限制 |
|
|
|
|
| `for<...> type` | 高阶生命周期限制 |
|
|
|
|
| `type<ident=type>` | 泛型,其一个或多个相关类型必须被指定为特定类型(如 `Iterator<Item=T>`)|
|
|
|
|
| `type<ident=type>` | 泛型,其一个或多个相关类型必须被指定为特定类型(如 `Iterator<Item=T>`)|
|
|
|
|
|
|
|
|
|
|
|
|
表 B-5 展示了出现在使用 trait bounds 约束泛型参数上下文中的符号。
|
|
|
|
表 B-5 展示了使用特征约束来限制泛型参数的符号。
|
|
|
|
|
|
|
|
|
|
|
|
<span class="caption">表 B-5: Trait Bound 约束</span>
|
|
|
|
<span class="caption">表 B-5: 特征约束</span>
|
|
|
|
|
|
|
|
|
|
|
|
| 符号 | 解释 |
|
|
|
|
| 符号 | 解释 |
|
|
|
|
|--------|-------------|
|
|
|
|
|--------|-------------|
|
|
|
|
| `T: U` | 泛型参数 `T` 约束于实现了 `U` 的类型 |
|
|
|
|
| `T: U` | 泛型参数 `T`需实现`U`类型 |
|
|
|
|
| `T: 'a` | 泛型 `T` 的生命周期必须长于 `'a`(意味着该类型不能传递包含生命周期短于 `'a` 的任何引用)|
|
|
|
|
| `T: 'a` | 泛型 `T` 的生命周期必须长于 `'a`(意味着该类型不能传递包含生命周期短于 `'a` 的任何引用)|
|
|
|
|
| `T : 'static` | 泛型 T 不包含除 'static 之外的借用引用 |
|
|
|
|
| `T : 'static` | 泛型 T只能使用声明周期为'static的引用 |
|
|
|
|
| `'b: 'a` | 泛型 `'b` 生命周期必须长于泛型 `'a` |
|
|
|
|
| `'b: 'a` |生命周期`'b`必须长于生命周期`'a` |
|
|
|
|
| `T: ?Sized` | 使用一个不定大小的泛型类型 |
|
|
|
|
| `T: ?Sized` | 使用一个不定大小的泛型类型 |
|
|
|
|
| `'a + trait`, `trait + trait` | 复合类型限制 |
|
|
|
|
| `'a + trait`, `trait + trait` | 多个类型组成的复合类型限制 |
|
|
|
|
|
|
|
|
|
|
|
|
表 B-6 展示了在调用或定义宏以及在其上指定属性时的上下文中出现的符号。
|
|
|
|
表 B-6 展示了宏以及在一个对象上定义属性的符号。
|
|
|
|
|
|
|
|
|
|
|
|
<span class="caption">表 B-6: 宏与属性</span>
|
|
|
|
<span class="caption">表 B-6: 宏与属性</span>
|
|
|
|
|
|
|
|
|
|
|
@ -146,6 +142,7 @@
|
|
|
|
| `$ident` | 宏替换 |
|
|
|
|
| `$ident` | 宏替换 |
|
|
|
|
| `$ident:kind` | 宏捕获 |
|
|
|
|
| `$ident:kind` | 宏捕获 |
|
|
|
|
| `$(…)…` | 宏重复 |
|
|
|
|
| `$(…)…` | 宏重复 |
|
|
|
|
|
|
|
|
| `ident!(...)`, `ident!{...}`, `ident![...]` | 宏调用 |
|
|
|
|
|
|
|
|
|
|
|
|
表 B-7 展示了写注释的符号。
|
|
|
|
表 B-7 展示了写注释的符号。
|
|
|
|
|
|
|
|
|
|
|
@ -154,13 +151,13 @@
|
|
|
|
| 符号 | 注释 |
|
|
|
|
| 符号 | 注释 |
|
|
|
|
|--------|-------------|
|
|
|
|
|--------|-------------|
|
|
|
|
| `//` | 行注释 |
|
|
|
|
| `//` | 行注释 |
|
|
|
|
| `//!` | 内部行文档注释 |
|
|
|
|
| `//!` | 内部行(hang)文档注释 |
|
|
|
|
| `///` | 外部行文档注释 |
|
|
|
|
| `///` | 外部行文档注释 |
|
|
|
|
| `/*...*/` | 块注释 |
|
|
|
|
| `/*...*/` | 块注释 |
|
|
|
|
| `/*!...*/` | 内部块文档注释 |
|
|
|
|
| `/*!...*/` | 内部块文档注释 |
|
|
|
|
| `/**...*/` | 外部块文档注释 |
|
|
|
|
| `/**...*/` | 外部块文档注释 |
|
|
|
|
|
|
|
|
|
|
|
|
表 B-8 展示了出现在使用元组时上下文中的符号。
|
|
|
|
表 B-8 展示了出现在使用元组时的符号。
|
|
|
|
|
|
|
|
|
|
|
|
<span class="caption">表 B-8: 元组</span>
|
|
|
|
<span class="caption">表 B-8: 元组</span>
|
|
|
|
|
|
|
|
|
|
|
@ -173,7 +170,6 @@
|
|
|
|
| `(expr, ...)` | 元组表达式 |
|
|
|
|
| `(expr, ...)` | 元组表达式 |
|
|
|
|
| `(type, ...)` | 元组类型 |
|
|
|
|
| `(type, ...)` | 元组类型 |
|
|
|
|
| `expr(expr, ...)` | 函数调用表达式;也用于初始化元组结构体 `struct` 以及元组枚举 `enum` 变体 |
|
|
|
|
| `expr(expr, ...)` | 函数调用表达式;也用于初始化元组结构体 `struct` 以及元组枚举 `enum` 变体 |
|
|
|
|
| `ident!(...)`, `ident!{...}`, `ident![...]` | 宏调用 |
|
|
|
|
|
|
|
|
| `expr.0`, `expr.1`, etc. | 元组索引 |
|
|
|
|
| `expr.0`, `expr.1`, etc. | 元组索引 |
|
|
|
|
|
|
|
|
|
|
|
|
表 B-9 展示了使用大括号的上下文。
|
|
|
|
表 B-9 展示了使用大括号的上下文。
|
|
|
@ -182,8 +178,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
| 符号 | 解释 |
|
|
|
|
| 符号 | 解释 |
|
|
|
|
|---------|-------------|
|
|
|
|
|---------|-------------|
|
|
|
|
| `{...}` | 块表达式 |
|
|
|
|
| `{...}` | 代码块表达式 |
|
|
|
|
| `Type {...}` | `struct` 字面值 |
|
|
|
|
| `Type {...}` | 结构体字面值 |
|
|
|
|
|
|
|
|
|
|
|
|
表 B-10 展示了使用方括号的上下文。
|
|
|
|
表 B-10 展示了使用方括号的上下文。
|
|
|
|
|
|
|
|
|
|
|
@ -192,7 +188,7 @@
|
|
|
|
| 符号 | 解释 |
|
|
|
|
| 符号 | 解释 |
|
|
|
|
|---------|-------------|
|
|
|
|
|---------|-------------|
|
|
|
|
| `[...]` | 数组 |
|
|
|
|
| `[...]` | 数组 |
|
|
|
|
| `[expr; len]` | 复制了 `len`个 `expr`的数组 |
|
|
|
|
| `[expr; len]` | 数组里包含`len`个`expr` |
|
|
|
|
| `[type; len]` | 包含 `len`个 `type` 类型的数组|
|
|
|
|
| `[type; len]` | 数组里包含了`len`个`type`类型的对象|
|
|
|
|
| `expr[expr]` | 集合索引。 重载(`Index`, `IndexMut`) |
|
|
|
|
| `expr[expr]` | 集合索引。 重载(`Index`, `IndexMut`) |
|
|
|
|
| `expr[..]`, `expr[a..]`, `expr[..b]`, `expr[a..b]` | 集合索引,使用 `Range`,`RangeFrom`,`RangeTo` 或 `RangeFull` 作为索引来代替集合 slice |
|
|
|
|
| `expr[..]`, `expr[a..]`, `expr[..b]`, `expr[a..b]` | 集合索引,也称为集合切片,索引要实现以下特征中的其中一个:`Range`,`RangeFrom`,`RangeTo` 或 `RangeFull` |
|
|
|
|