# #中缀 #操作符 #样板代码 #函数 #必需

infix_macro

提供宏,用于生成使用 "*操作符*" 中缀函数所需的样板代码

2 个版本

0.1.1 2023 年 2 月 3 日
0.1.0 2023 年 2 月 3 日

#2458Rust 模式

自定义许可

5KB

中缀宏

一个用于快速创建中缀运算符的声明式宏

使用 @wishawa 在 RFC #1579 中首次展示的技术,通过重载乘法运算符,并创建一个中间结构体来在乘法操作中“传递”左操作数到右操作数,您可以创建类似这样的自定义二进制中缀运算

let dot_product = vector_a *dot* vector_b;

不幸的是,要强制 rust 具有这种意外的功能,需要相当多的样板代码(见链接的 RFC)。不幸的是,这种样板代码在各个实现之间几乎完全相同,这意味着我们可以使用宏来消除所有这些!这正是这个包所做的事情。

示例和用法

简单地 cargo add infix_macro,然后在模块顶部放置 use infix_macro::infix;,然后按照以下语法

infix!(name, partial_name, T, U, F);

其中 name 是您实际将使用的运算符(我建议使用简短的小写),partial_name 是用于在重载乘法操作中传递值的中间结构体的名称(我建议使用类似 PartialName 的名称,如果您需要使用它,因为闭包无法自行推断类型),T 是输入类型,U 是输出类型,而 F 是实现 Fn(T, T) -> U 的二进制函数

完成此操作后,您可以使用您的 *infix* 运算符。我尚未对原始函数或方法调用进行性能分析,尽管我计划在不久的将来进行。可以合理地假设它的性能略低于这些选项。

无运行时依赖