使用定义函数的宏时,是否可以在函数中添加前缀?
macro_rules! my_test {
($id:ident, $arg:expr) => {
#[test]
fn $id() {
my_test_impl(stringify!($id), $arg);
}
}
}
例如,fn my_test_$id() {
我使用可能以数字开头的标识符定义测试,我想使用公共前缀。
答案 0 :(得分:6)
[...]是否可以在函数中添加前缀?
没有。真的,真的没有。 Super 完全没有,即使是最轻微的。
我想使用通用前缀。
将它们全部放在mod
中。
答案 1 :(得分:1)
目前稳定版不支持此功能。
但夜间有一项名为concat_idents
的功能:
concat_idents!(my_test_, $id)
见
更新:似乎没有近期计划将其添加到稳定版本中,请参阅问题。
答案 2 :(得分:1)
如上所述,您应该使用子模块,但请记住,宏可以创建子模块,子模块可以嵌套,允许它们的名称重叠,子模块可以提供impl
,tests
子模块是不是魔法。
我曾经提交了一个pull request,通过使用这些技巧重构代码来避免许多“锅炉名称”,尽管#[no_mangle]
导出使其变得更难。