Macros 是否可以从宏中发出Rust属性?
我正在尝试做如下事情:Macros 是否可以从宏中发出Rust属性?,macros,rust,Macros,Rust,我正在尝试做如下事情: macro_rules! attr_trial { ($msg:expr) => {{ let id = env!("SOME_ENV"); #[link_section = env!("SOME_ENV")] static MESSAGE: &'static str = $msg; }}; } 我得到以下错误: 错误:意外标记:`env` -->src/main.rs:34:18 | 34
macro_rules! attr_trial {
($msg:expr) => {{
let id = env!("SOME_ENV");
#[link_section = env!("SOME_ENV")]
static MESSAGE: &'static str = $msg;
}};
}
我得到以下错误:
错误:意外标记:`env`
-->src/main.rs:34:18
|
34 |#[link_section=env!(“SOME_env”)]
| ^
是否可以从宏中发出Rust属性
绝对,这是可能的。下面是一个宏,它从宏中发出test
属性:
macro_rules! example {
() => {
#[test]
fn test() {
assert!(false);
}
};
}
example!();
然而,这不可能在所有情况下都实现。例如,不能仅发射属性,因为该属性应附加到项目:
macro_rules! example {
() => {
#[test]
};
}
// Fails!
example!();
fn test() {
assert!(false);
}
您的实际问题更接近“是否可以在属性内部调用宏”。答案似乎是否定的-解析器不希望在该位置进行宏扩展。也许您想看看代码生成或过程宏,这取决于您尝试执行的操作