gpt4 book ai didi

macros - 是否可以从宏中发出 Rust 属性?

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

我正在尝试执行以下操作:

macro_rules! attr_trial {
($msg:expr) => {{
let id = env!("SOME_ENV");

#[link_section = env!("SOME_ENV")]
static MESSAGE: &'static str = $msg;
}};
}

我收到以下错误:

error: unexpected token: `env`
--> src/main.rs:34:18
|
34 | #[link_section = env!("SOME_ENV")]
| ^

最佳答案

Is it possible to emit Rust attributes from within macros?

绝对,这是可能的。这是一个从宏内部发出 test 属性的宏:

macro_rules! example {
() => {
#[test]
fn test() {
assert!(false);
}
};
}

example!();

然而,这并非在所有情况下都是可能的。例如,您不能 发出一个属性,因为该属性应该附加到一个项目:

macro_rules! example {
() => {
#[test]
};
}

// Fails!
example!();
fn test() {
assert!(false);
}

您的实际问题更接近于“是否可以在属性内部调用宏”。答案是,但仅从Rust 1.54 开始.

在该版本之前,解析器不希望在该位置进行宏扩展。如果需要,您可能需要查看代码生成或过程宏,具体取决于您要执行的操作。

请参阅 How is it possible to keep Rust module documentation in separate Markdown files? 上的答案了解更多详情。

关于macros - 是否可以从宏中发出 Rust 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41945628/

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