附录B:运算符和符号

本附录包含了Cairo语法的词汇表。

运算符

表B-1包含了开罗的运算符,运算符在上下文中出现的例子和简短的解释,以及该运算符是否可以重载。如果一个运算符是可重载的,则列出了用于重载该运算符的相关特性。

表B-1:运算符

运算符示例解释是否可重载?
!!expr位或逻辑补码Not
!=expr != expr不等于PartialEq
%expr % expr算数取余Rem
%=var %= expr算数取余并赋值RemEq
&expr & expr按位与BitAnd
&&expr && expr短路逻辑与
*expr * expr算数乘Mul
*=var *= expr算数乘并赋值MulEq
@@varSnapshot
**varDesnap
+expr + expr算术加Add
+=var += expr算数加并赋值AddEq
,expr, expr参数和元素分隔符
--expr算数负号Neg
-expr - expr算数减Sub
-=var -= expr算数减并赋值SubEq
->fn(...) -> type, |...| -> type函数与闭包的返回类型
.expr.ident成员访问
/expr / expr算数除Div
/=var /= expr算数除并赋值DivEq
:pat: type, ident: type约束条件
:ident: expr结构体字段初始化器
;expr;语句和条目结束符号
<expr < expr小于比较PartialOrd
<=expr <= expr小于等于比较PartialOrd
=var = expr赋值
==expr == expr等于比较PartialEq
=>pat => expr匹配分支的一部分语法
>expr > expr大于比较PartialOrd
>=expr >= expr大于等于比较PartialOrd
^expr ^ expr按位异或BitXor
|expr | expr按位或BitOr
||expr || expr短路逻辑或

非运算符符号

下面的列表包含了所有不作为运算符使用的符号;也就是说,他们并不像函数调用或方法调用一样表现。

表B-2 展示了以其自身出现以及出现在合法其他各个地方的符号。

表B-2:独立语法

符号解释
..._u8, ..._usize, 等等。指定类型的数值常量
'...'短字符串
_"“忽略” 模式绑定;也用于增强整型字面值的可读性

表B-3 展示了出现在从模块结构到项的路径上下文中的符号。

表B-3:路径相关语法

符号解释
ident::ident命名空间路径
super::path相对于当前模块的父级路径。
trait::method(...)通过命名定义该方法的trait来消除方法调用的二义性

表B-4 展示了出现在泛型类型参数上下文中的符号。

表 B-4:泛型

符号解释
path<...>为一个类型中的泛型指定具体参数(例如,Vec<u8>
path::<...>, method::<...>为一个泛型、函数或表达式中的方法指定具体参数; 通常被称为Turbofish。
fn ident<...>...泛型函数定义
struct ident<...>...泛型结构体定义
enum ident<...>...泛型枚举定义
impl<...>...定义泛型实现

表B-5展示了在调用或定义宏以及在其上指定属性时的上下文中出现的符号。

表B-5:宏和属性

符号解释
#[meta]外部属性

表B-6 展示了创建注释的符号。

表B-6:注释

符号解释
//行注释

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

表B-7:元组

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

表B-8展示了使用大括号的上下文。

表B-8:大括号

上下文解释
{...}块表达式
Type {...}struct字面值
Last change: 2023-07-20, commit: e127cf5