附录 B:运算符和符号


本附录包含 Rust 语法的词汇表,包括运算符和其他符号,这些符号可能单独出现或出现在路径、泛型、特征边界、宏、属性、注释、元组和括号的上下文中。


操作员


表 B-1 包含了 Rust 中的运算符、运算符在上下文中的示例、简短的解释,以及该运算符是否可重载。如果运算符是可重载的,则列出了用于重载该运算符的相关特征。


表 B-1:操作符


操作员

例子

解释

可重载?
!ident!(...), ident!{...}, ident![...]
宏展开
!!expr
位运算或逻辑非
Not
!=expr != expr
不等比较
PartialEq
%expr % expr
算术余数
Rem
%=var %= expr
算术余数和赋值
RemAssign
&&expr, &mut expr
借入
&&type, &mut type, &'a type, &'a mut type
借用的指针类型
&expr & expr
位与(Bitwise AND)
BitAnd
&=var &= expr
按位与和赋值
BitAndAssign
&&expr && expr
短路逻辑与
*expr * expr
算术乘法
Mul
*=var *= expr
算术乘法和赋值
MulAssign
**expr
取消引用
Deref
**const type, *mut type
原始指针
+trait + trait, 'a + trait
复合类型约束
+expr + expr
算术加法
Add
+=var += expr
算术加法和赋值
AddAssign
,expr, expr
参数和元素分隔符
-- expr
算术否定
Neg
-expr - expr
算术减法
Sub
-=var -= expr
算术减法和赋值
SubAssign
->fn(...) -> type, |…| -> type
函数和闭包返回类型
.expr.ident
成员访问
...., expr.., ..expr, expr..expr
右专属范围字面量
PartialOrd
..=..=expr, expr..=expr
右包容范围字面量
PartialOrd
....expr
结构体字面量更新语法
..variant(x, ..), struct_type { x, .. }
“其余”模式绑定
...expr...expr
(已弃用,改用 ..= )在模式中:包容性范围模式
/expr / expr
算术除法
Div
/=var /= expr
算术除法和赋值
DivAssign
:pat: type, ident: type
约束条件
:ident: expr
结构体字段初始化器
:'a: loop {...}
循环标签
;expr;
语句和项目终止符
;[...; len]
固定大小数组语法的一部分
<<expr << expr
左移
Shl
<<=var <<= expr
左移和赋值
ShlAssign
<expr < expr
小于比较
PartialOrd
<=expr <= expr
小于或等于比较
PartialOrd
=var = expr, ident = type
赋值/等价
==expr == expr
等于比较
PartialEq
=>pat => expr
部分匹配臂语法
>expr > expr
大于比较
PartialOrd
>=expr >= expr
大于或等于比较
PartialOrd
>>expr >> expr
右移
Shr
>>=var >>= expr
右移和赋值
ShrAssign
@ident @ pat
模式绑定
^expr ^ expr
按位异或
BitXor
^=var ^= expr
按位异或和赋值
BitXorAssign
|pat | pat
模式替代方案
|expr | expr
按位或
BitOr
|=var |= expr
按位或和赋值
BitOrAssign
||expr || expr
短路逻辑或运算符
?expr?
误差传播


非操作符符号


以下列表包含所有不作为操作符的符号;也就是说,它们的行为不像函数或方法调用。


表 B-2 显示了独立出现并在多种位置有效的符号。


表 B-2:独立语法


符号

解释
'ident
命名的生命期或循环标签

...u8 , ...i32 , ...f64 , ...usize , 等等。

特定类型的数值字面量
"..."
字符串字面量

r"..." , r#"..."# , r##"..."## , 等等。

原始字符串字面量,转义字符不被处理
b"..."
字节字符串字面量;构造一个字节数组而不是字符串

br"..." , br#"..."# , br##"..."## , 等等。

原始字节字符串字面量,原始和字节字符串字面量的组合
'...'
字符字面量
b'...'
ASCII 字节字面量
|…| expr
闭包
!
总是为空的底类型用于发散函数
_
“忽略”模式绑定;也用于使整数字面量更易读


表 B-3 显示了在通过模块层次结构到某个项目的路径上下文中出现的符号。


表 B-3:路径相关语法


符号

解释
ident::ident
命名空间路径
::path
相对于 crate 根的路径(即,明确的绝对路径)
self::path
相对于当前模块的路径(即,显式的相对路径)。
super::path
相对于当前模块的父级的路径
type::ident, <type as trait>::ident
关联的常量、函数和类型
<type>::...
与无法直接命名的类型(例如, <&T>::...<[T]>::... 等)相关联的项
trait::method(...)
通过命名定义方法调用的特质来消除歧义
type::method(...)
通过命名定义该方法调用的类型来消除歧义
<type as trait>::method(...)
通过命名特质和类型来消歧方法调用


表 B-4 显示了在使用泛型类型参数时出现的符号。


表 B-4:Generics


符号

解释
path<...>
在类型中为泛型类型指定参数(例如, Vec<u8>
path::<...>, method::<...>
在表达式中为泛型类型、函数或方法指定参数;通常被称为 turbofish(例如, "42".parse::<i32>() )。
fn ident<...> ...
定义泛型函数
struct ident<...> ...
定义通用结构
enum ident<...> ...
定义通用枚举
impl<...> ...
定义泛型实现
for<...> type
更高的生命周期边界
type<ident=type>
一个或多个关联类型有特定赋值的泛型类型(例如, Iterator<Item=T>


表 B-5 显示了在使用特征边界约束泛型类型参数时出现的符号。


表 B-5:特征边界约束


符号

解释
T: U
泛型参数 T 限制为实现 U 的类型
T: 'a
泛型类型 T 必须比生命周期 'a 更长(意味着该类型不能传递包含任何生命周期短于 'a 的引用)
T: 'static
泛型类型 T'static 之外不包含其他借用的引用
'b: 'a
泛型生命周期 'b 必须长于生命周期 'a
T: ?Sized
允许泛型类型参数为动态大小类型
'a + trait, trait + trait
复合类型约束


表 B-6 显示了在调用或定义宏以及指定项目属性时出现的符号。


表 B-6:宏和属性


符号

解释
#[meta]
外部属性
#![meta]
内部属性
$ident
宏替换
$ident:kind
宏捕获
$(…)…
宏重复
ident!(...), ident!{...}, ident![...]
宏调用


表 B-7 显示了创建注释的符号。


表 B-7:评论


符号

解释
//
行注释
//!
内联文档注释
///
外部行文档注释
/*...*/
块注释
/*!...*/
内部块文档注释
/**...*/
外部块文档注释


表 B-8 显示了在使用元组的上下文中出现的符号。


表 B-8:元组


符号

解释
()
空元组(也称为单元),既是字面量也是类型
(expr)
括号表达式
(expr,)
单元素元组表达式
(type,)
单元素元组类型
(expr, ...)
元组表达式
(type, ...)
元组类型
expr(expr, ...)
函数调用表达式;也用于初始化元组 struct 和元组 enum 变体

expr.0 , expr.1 , 等。

元组索引


表 B-9 显示了使用花括号的上下文。


表 B-9:大括号


上下文

解释
{...}
块表达式
Type {...}struct literal


表 B-10 显示了方括号使用的上下文。


表 B-10:方括号


上下文

解释
[...]
数组字面量
[expr; len]
包含 lenexpr 的数组字面量
[type; len]
包含 lentype 实例的数组类型
expr[expr]
集合索引。可重载( IndexIndexMut
expr[..], expr[a..], expr[..b], expr[a..b]
集合索引假装成集合切片,使用 Range , RangeFrom , RangeTo , 或 RangeFull 作为“索引”