2 个版本
0.1.1 | 2023 年 2 月 3 日 |
---|---|
0.1.0 | 2023 年 2 月 3 日 |
#2458 在 Rust 模式
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*
运算符。我尚未对原始函数或方法调用进行性能分析,尽管我计划在不久的将来进行。可以合理地假设它的性能略低于这些选项。