#macro #postfix #stable #today

postfix-macros

稳定的Rust中的后缀宏,今天

1个不稳定版本

0.1.0 2020年11月7日

#564进程宏

Download history 9/week @ 2024-03-11 4/week @ 2024-03-18 56/week @ 2024-03-25 41/week @ 2024-04-01 147/week @ 2024-04-08 40/week @ 2024-04-22 34/week @ 2024-04-29 67/week @ 2024-05-13 18/week @ 2024-05-20 14/week @ 2024-05-27 26/week @ 2024-06-03 23/week @ 2024-06-10 21/week @ 2024-06-17 42/week @ 2024-06-24

每月115次下载
用于 macro-map

MIT/Apache

13KB
67

postfix-macros

docs crates.io

稳定的Rust中的后缀宏,今天。

arr.get(10).unwrap_or!(return Err(()));

"hello world".println!();
42.assert_ne!(4 + 2);

val.iter()
	.map(|v| v.1)
	.find(|z| z.matches!(Custom::Enum(_) | Custom::EnumOther))
	.dbg!();

警告:alpha质量软件。存在优先级错误。请在使用时手动验证是否受到影响。

说明

RFC 2442 提出将后缀宏添加到Rust语言。然而,来自语言团队成员的一些基本问题仍然存在,并且看起来它们不会很快得到解决,因此不太可能很快合并,如果确实会合并的话。

postfix-macros crate 为您提供了一个进程宏 postfix_macros,该宏检查 possibly.chained.expression.macro_name!(params) 模式,并将其重写为传统宏调用的术语,将表达式添加到传递的参数之前。这使得您拥有的每个“感叹号”宏都成为潜在的后缀宏(UFCS 风格)。而且还不够,此crate还提供了一组用于后缀上下文的宏,以便您更加方便。

例如,unwrap_or! 宏使得之前需要5行才能写成的代码

let v = if let Some(v) = something {
	v
} else {
	continue
};

postfix-macros 上下文中可以一行写出

let v = something.unwrap_or!(continue);

此外,它还用更接近 unwrap_or 函数的清洁度替换了 unwrap_or_else 闭包模式,同时仍然像 unwrap_or_else 一样懒惰地评估

let v = something.unwrap_or_else(|| some_expensive_fn_call(1, 2, 3));
let v = something.unwrap_or!(some_expensive_fn_call(1, 2, 3));

足迹

此crate没有依赖除进程宏依赖之外的东西,进程宏依赖本身也没有依赖。不依赖于编译速度极慢的 syn crate。因此编译时间非常短,因此此crate的足迹很小。

此选择也有一些缺点,因为 syn 实际上是一个非常强大的工具,即在某些地方的表达式优先级与正常Rust的优先级不同。这些差异被视为错误,用户欢迎提交有关这些错误的报告。不支持依赖于非Rust特定的行为,这是此crate的semver保证所不支持的。

MSRV

此crate的MSRV是 1.42.0

待办事项

  • 向rustc发送一个PR,以语法上允许后缀宏,以便我们使用属性宏。参见这个PR了解先例。

许可证

本工具根据MIT许可证和Apache许可证(版本2.0)的条款进行分发,任选其一。

有关详细信息,请参阅LICENSE

您贡献的许可证

除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交给作品以包含在内的任何贡献,将以上述方式双许可,不附加任何额外条款或条件。

依赖项