#math-expressions #compiler #forms #converting #add #mul #desugar

lower

在编译器不会的情况下去解构数学

1个不稳定版本

0.1.1 2024年2月18日
0.1.0 2024年2月17日

#773 in 过程宏

Download history 2/week @ 2024-03-09 25/week @ 2024-03-30 6/week @ 2024-04-06

每月55次下载

MIT许可证

13KB
335 代码行

lower

将表达式降低到其“解构”形式。

例如

a * b + c => (a.mul(b)).add(c)

注意它非常广泛,因此

lower::math! { fn main() -> u8 {
    const X: u8 = 31 * 2;
    return 2 * X + 2;
} }

展开为

fn main() -> u8 {
    const X: u8 = 31.mul(2);
    return (2.mul(X)).add(2);
}

应该适用于大多数表达式。

为什么

好吧,你看,我创建了一个用于数组的crate。然后,我添加了add/mul/…,当我不得不手动调用它们时,我就感到厌烦。现在,你可以做一些很酷的事情,比如lower::math! { 2 * ([5, 2] + 5) }


lib.rs:

一个小型的宏crate。

提供了一个方便的宏,用于将a + b转换为a.add(b),这在您无法轻松重载Add特质时非常有用。

依赖项

~295–750KB
~18K SLoC