【发布时间】:2016-10-02 12:15:32
【问题描述】:
我正在使用一个用于字符串实习的库 (string-cache),它使用宏来高效地创建元素 (atom!)。但是为了简化,这里有一个类似的宏来演示这个问题
macro_rules! string_intern {
("d") => ("Found D");
}
说我需要从另一个宏调用这个宏,并给它一个字符串版本的标识符。
macro_rules! print_ident {
($id:ident) => (
string_intern!(stringify!($id));
);
}
但是调用这个宏
fn main() {
print_ident!(d);
}
因错误而失败:
error: no rules expected the token `stringify`
--> <anon>:7:24
|
7 | string_intern!(stringify!($id));
| ^^^^^^^^^
我知道stringify! 正确地将标识符d 转换为字符串"d",因为将它提供给println! 可以按预期工作。有没有办法将我想要转换为字符串的标识符传递给string_intern?
【问题讨论】: