gpt4 book ai didi

macros - 订购宏参数执行

转载 作者:行者123 更新时间:2023-11-29 07:52:26 24 4
gpt4 key购买 nike

我正在使用一个字符串驻留库 ( 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));
| ^^^^^^^^^

Playground link

我知道 stringify! 正确地将标识符 d 转换为字符串 "d",因为将它提供给 println! 按预期工作。有没有办法将我想要转换成字符串的标识符传递给 string_intern

最佳答案

println! 允许您执行此操作,因为它使用 format_args!在幕后,这是一个编译器提供的“内在”,在使用它之前强行评估它的第一个参数。您不能从用户定义的宏中执行此操作;你必须编写一个编译器插件(这需要一个夜间编译器并且不能保证稳定性)。

所以,是的;你不能。对不起。您唯一可以做的就是以您不需要实际字符串文字的方式重新定义宏,或者更改调用它的方式。

关于macros - 订购宏参数执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39816895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com