#traits #terms #macro #pattern #refer #binary-operator

trait-tactics

提供使用其他特质实现特质的常见模式的宏

1 个不稳定版本

0.1.0 2024年4月7日

#1928Rust模式


flexint 中使用

MIT 许可证

11KB

提供使用其他特质实现特质的常见模式的宏。


lib.rs:

提供使用其他特质实现特质的常见模式的宏。

二元运算符

一个二元运算符特质是一个具有

  • 单个泛型类型参数表示右侧操作数,通常默认为 Self
  • 单个关联类型 Output
  • 单个方法,其两个参数是 self 和右侧操作数,返回 Self::Output

一个复合赋值运算符特质是一个具有

  • 单个泛型类型参数表示右侧操作数,通常默认为 Self
  • 单个方法,其两个参数是 &mut self 和右侧操作数,返回 ()

尤其是在重载Rust的内置二元运算符时,通常不仅为 A ⋄ B 提供实现,而且也为 &A ⋄ BA ⋄ &B&A ⋄ &B(其中 表示要重载的运算符,而 AB 是操作数类型)提供实现。此外,如果二元运算符有相应的复合赋值运算符(我们将其称为 =),则通常为 A ⋄= BA ⋄= &B 提供实现。此模块提供的宏有助于编写这些附加的特质实现。

首先,实现 &A ⋄ &B。这是最通用的实现,因为所有其他实现都可以用它来编写。

然后,根据以下建议提供实现,可以使用适当的宏,或者明确编写优化的实现。

  • 如果二元运算符有相应的复合赋值运算符
    1. 使用 [assign_via_binop_ref_lhs] 实现以下表达式:A ⋄= &B
    2. 使用 [assign_via_assign_ref] 实现以下表达式:A ⋄= B
    3. 使用 [binop_via_assign] 实现以下表达式:A ⋄ &B
    4. 使用 [binop_via_binop_ref_rhs] 实现以下表达式:&A ⋄ B
    5. 使用 [binop_via_assign] 实现以下表达式:A ⋄ B
  • 否则
    1. 使用 [binop_via_binop_ref_lhs] 实现以下表达式:A ⋄ &B
    2. 使用 [binop_via_binop_ref_rhs] 实现以下表达式:&A ⋄ B
    3. 以两种方式之一实现以下表达式:A ⋄ B
      • 使用 [binop_via_binop_ref_lhs],或者
      • 使用 [binop_via_binop_ref_rhs](当 A ⋄ &B 是优化实现时更受欢迎)。

依赖项

~0.7–1.2MB
~26K SLoC