gpt4 book ai didi

rust - 宏扩展忽略 token `let` 和任何后续

转载 作者:行者123 更新时间:2023-12-03 11:35:24 25 4
gpt4 key购买 nike

我想用宏 ident 定义一个变量并将其传递给派生宏,但出现错误:

错误

error: macro expansion ignores token `let` and any following
--> database/src/models.rs:15:9
|
15 | let struct_name = stringify!($name);
| ^^^
...
50 | / model!(Person {
51 | | name: String
52 | | });
| |___- caused by the macro expansion here
|
= note: the usage of `model!` is likely invalid in item context

代码

#[macro_export]
macro_rules! model {
(
$(#[$met: meta])*
$name: ident { $($attr: ident : $typ: ty),* }
) => {

let struct_name = stringify!($name);
//let table_name = struct_name.to_camel_case();

dbg!("{}", struct_name);

#[derive(Debug)]
struct $name {
name: String
};
};
}

model!(Person {
name: String
});

Playground

最佳答案

您在编译器需要一个项目(函数/结构/特征声明或impl block )的地方使用宏model!let 语句仅在代码块内有效。这就是为什么你的 first example工作(宏调用在 main 内),而你的 second example没有。

这似乎是 XY problem 的一个实例.查看procedural macros如果您想在编译时运行代码以生成代码。

关于rust - 宏扩展忽略 token `let` 和任何后续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62783340/

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