附录查询
运算符
运算符 | 示例 | 解释 | 是否可重载 |
---|---|---|---|
! | 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 | 按位与 | BitAnd |
&= | var &= expr | 按位与及赋值 | BitAndAssign |
&& | expr && expr | 短路(Short-circuiting)逻辑与 | |
* | 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 | (Deprecated,请使用 ..= )在模式中: 闭区间范围模式 | |
/ | 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` |
` | =` | `var | = expr` |
` | ` | `expr | |
? | expr? | 错误传播 |
非运算符符号
下表中包含了所有和运算符不一样功能的符号;也就是说,他们并不像函数调用或方法调用一样表现。
符号 | 解释 |
---|---|
'ident | 命名生命周期或循环标签 |
...u8 , ...i32 , ...f64 , ...usize 等 | 指定类型的数值常量 |
"..." | 字符串常量 |
r"..." , r#"..."# , r##"..."## , etc. | 原始字符串字面值,未处理的转义字符 |
b"..." | 字节字符串字面值; 构造一个字节数组类型而非字符串 |
br"..." , br#"..."# , br##"..."## 等 | 原始字节字符串字面值,原始和字节字符串字面值的结合 |
'...' | 字符字面值 |
b'...' | ASCII 码字节字面值 |
` | ... |
! | 离散函数的总是为空的类型 |
_ | “忽略” 模式绑定;也用于增强整型字面值的可读性 |
下表展示了出现在从模块结构到项的路径上下文中的符号
符号 | 解释 |
---|---|
ident::ident | 命名空间路径 |
::path | 与 crate 根相对的路径(如一个显式绝对路径) |
self::path | 与当前模块相对的路径(如一个显式相对路径) |
super::path | 与父模块相对的路径 |
type::ident , ::ident | 关联常量、函数以及类型 |
::... | 不可以被直接命名的关联项类型(如 <&T>::... ,<[T]>::... , 等) |
trait::method(...) | 通过命名定义的 trait 来消除方法调用的二义性 |
type::method(...) | 通过命名定义的类型来消除方法调用的二义性 |
::method(...) | 通过命名 trait 和类型来消除方法调用的二义性 |
下表展示了出现在泛型类型参数上下文中的符号。
符号 | 解释 |
---|---|
path<...> | 为一个类型中的泛型指定具体参数(如 Vec ) |
path::<...> , method::<...> | 为一个泛型、函数或表达式中的方法指定具体参数,通常指 turbofish(如 "42".parse::() ) |
fn ident<...> ... | 泛型函数定义 |
struct ident<...> ... | 泛型结构体定义 |
enum ident<...> ... | 泛型枚举定义 |
impl<...> ... | 定义泛型实现 |
for<...> type | 高级生命周期限制 |
type | 泛型,其一个或多个相关类型必须被指定为特定类型(如 Iterator ) |
下表展示了在调用或定义宏以及在其上指定属性时的上下文中出现的符号。
符号 | 解释 |
---|---|
#[meta] | 外部属性 |
#![meta] | 内部属性 |
$ident | 宏替换 |
$ident:kind | 宏捕获 |
$(…)… | 宏重复 |
ident!(...) , ident!{...} , ident![...] | 宏调用 |
下表展示了出现在使用元组时上下文中的符号。
符号 | 解释 |
---|---|
() | 空元组(亦称单元),即是字面值也是类型 |
(expr) | 括号表达式 |
(expr,) | 单一元素元组表达式 |
(type,) | 单一元素元组类型 |
(expr, ...) | 元组表达式 |
(type, ...) | 元组类型 |
expr(expr, ...) | 函数调用表达式;也用于初始化元组结构体 struct 以及元组枚举 enum 变体 |
expr.0 , expr.1 , etc. | 元组索引 |
下表展示了使用大括号的上下文。
符号 | 解释 |
---|---|
{...} | 块表达式 |
Type {...} | struct 字面值 |
下表展示了使用方括号的上下文。
符号 | 解释 |
---|---|
[...] | 数组 |
[expr; len] | 复制了 len 个 expr 的数组 |
[type; len] | 包含 len 个 type 类型的数组 |
expr[expr] | 集合索引。 重载(Index , IndexMut ) |
expr[..] , expr[a..] , expr[..b] , expr[a..b] | 集合索引,使用 Range ,RangeFrom ,RangeTo 或 RangeFull 作为索引来代替集合 slice |
关键字
如下关键字目前有对应其描述的功能。
as
- 强制类型转换,消除特定包含项的 trait 的歧义,或者对use
语句中的项重命名async
- 返回一个Future
而不是阻塞当前线程await
- 暂停执行直到Future
的结果就绪break
- 立刻退出循环const
- 定义常量或不变裸指针(constant raw pointer)continue
- 继续进入下一次循环迭代crate
- 在模块路径中,代指 crate rootdyn
- 动态分发 trait 对象else
- 作为if
和if let
控制流结构的 fallbackenum
- 定义一个枚举extern
- 链接一个外部函数或变量false
- 布尔字面值false
fn
- 定义一个函数或 函数指针类型 (function pointer type)for
- 遍历一个迭代器或实现一个 trait 或者指定一个更高级的生命周期if
- 基于条件表达式的结果分支impl
- 实现自有或 trait 功能in
-for
循环语法的一部分let
- 绑定一个变量loop
- 无条件循环match
- 模式匹配mod
- 定义一个模块move
- 使闭包获取其所捕获项的所有权mut
- 表示引用、裸指针或模式绑定的可变性pub
- 表示结构体字段、impl
块或模块的公有可见性ref
- 通过引用绑定return
- 从函数中返回Self
- 定义或实现 trait 的类型的类型别名self
- 表示方法本身或当前模块static
- 表示全局变量或在整个程序执行期间保持其生命周期struct
- 定义一个结构体super
- 表示当前模块的父模块trait
- 定义一个 traittrue
- 布尔字面值true
type
- 定义一个类型别名或关联类型union
- 定义一个 union 并且是 union 声明中唯一用到的关键字unsafe
- 表示不安全的代码、函数、trait 或实现use
- 引入外部空间的符号where
- 表示一个约束类型的从句while
- 基于一个表达式的结果判断是否进行循环
保留关键字
如下关键字没有任何功能,不过由 Rust 保留以备将来的应用。
abstract
become
box
do
final
macro
override
priv
try
typeof
unsized
virtual
yield
弱关键字
这类关键字只有在特定的上下文中才有特殊的意义。例如,可以声明名为 union
的变量或方法。
macro_rules
用于创建自定义宏。union
用于声明联合体(union
),它只有在联合体声明中使用时才是关键字。'static
用于静态生存期,不能用作通用泛型生存期参数和循环标签compile_fail// error[E0262]: invalid lifetime parameter name: `'static` fn invalid_lifetime_parameter<'static>(s: &'static str) -> &'static str { s }
在 2015 版本中,当
dyn
用在非::
开头的路径限定的类型前时,它是关键字。
原始标识符
原始标识符允许使用你选择任何单词作为标识符,即使该单词恰好是关键字或者保留关键字,带有 r#
前缀。 这给予了我们更大的自由来选择名字,这样与其他语言交互式就不用考虑到关键字问题。示例:
rust
fn r#match(needle: &str, haystack: &str) -> bool {
haystack.contains(needle)
}
fn main() {
assert!(r#match("foo", "foobar"));
}