1 个不稳定版本
0.1.0 | 2024年4月7日 |
---|
#1928 在 Rust模式
在 flexint 中使用
11KB
提供使用其他特质实现特质的常见模式的宏。
lib.rs
:
提供使用其他特质实现特质的常见模式的宏。
二元运算符
一个二元运算符特质是一个具有
- 单个泛型类型参数表示右侧操作数,通常默认为
Self
- 单个关联类型
Output
- 单个方法,其两个参数是
self
和右侧操作数,返回Self::Output
一个复合赋值运算符特质是一个具有
- 单个泛型类型参数表示右侧操作数,通常默认为
Self
- 单个方法,其两个参数是
&mut self
和右侧操作数,返回()
尤其是在重载Rust的内置二元运算符时,通常不仅为 A ⋄ B
提供实现,而且也为 &A ⋄ B
、A ⋄ &B
和 &A ⋄ &B
(其中 ⋄
表示要重载的运算符,而 A
和 B
是操作数类型)提供实现。此外,如果二元运算符有相应的复合赋值运算符(我们将其称为 ⋄=
),则通常为 A ⋄= B
和 A ⋄= &B
提供实现。此模块提供的宏有助于编写这些附加的特质实现。
首先,实现 &A ⋄ &B
。这是最通用的实现,因为所有其他实现都可以用它来编写。
然后,根据以下建议提供实现,可以使用适当的宏,或者明确编写优化的实现。
- 如果二元运算符有相应的复合赋值运算符
- 使用 [assign_via_binop_ref_lhs] 实现以下表达式:
A ⋄= &B
。 - 使用 [assign_via_assign_ref] 实现以下表达式:
A ⋄= B
。 - 使用 [binop_via_assign] 实现以下表达式:
A ⋄ &B
。 - 使用 [binop_via_binop_ref_rhs] 实现以下表达式:
&A ⋄ B
。 - 使用 [binop_via_assign] 实现以下表达式:
A ⋄ B
。
- 使用 [assign_via_binop_ref_lhs] 实现以下表达式:
- 否则
- 使用 [binop_via_binop_ref_lhs] 实现以下表达式:
A ⋄ &B
。 - 使用 [binop_via_binop_ref_rhs] 实现以下表达式:
&A ⋄ B
。 - 以两种方式之一实现以下表达式:
A ⋄ B
- 使用 [binop_via_binop_ref_lhs],或者
- 使用 [binop_via_binop_ref_rhs](当
A ⋄ &B
是优化实现时更受欢迎)。
- 使用 [binop_via_binop_ref_lhs] 实现以下表达式:
依赖项
~0.7–1.2MB
~26K SLoC