【发布时间】:2015-08-29 18:48:53
【问题描述】:
我正在尝试为宏制作包装器。问题是我不想在两个宏中重复相同的规则。有没有办法做到这一点?
这是我尝试过的:
macro_rules! inner {
($test:ident) => { stringify!($test) };
($test:ident.run()) => { format!("{}.run()", stringify!($test)) };
}
macro_rules! outer {
($expression:expr) => {
println!("{}", inner!($expression));
}
}
fn main() {
println!("{}", inner!(test));
println!("{}", inner!(test.run()));
outer!(test);
outer!(test.run());
}
但我收到以下错误:
src/main.rs:8:31: 8:42 error: expected ident, found test
src/main.rs:8 println!("{}", inner!($expression));
^~~~~~~~~~~
如果我为此更改 outer 宏,代码编译:
macro_rules! outer {
($expression:expr) => {
println!("{}", stringify!($expression));
}
}
我做错了什么?
【问题讨论】: