我正在尝试做以下事情:
Response[0]
我收到以下错误:
macro_rules! attr_trial {
($msg:expr) => {{
let id = env!("SOME_ENV");
#[link_section = env!("SOME_ENV")]
static MESSAGE: &'static str = $msg;
}};
}
答案 0 :(得分:5)
是否可以从宏中发出Rust属性?
绝对,这是可能的。这是一个从宏中发出test
属性的宏:
macro_rules! example {
() => {
#[test]
fn test() {
assert!(false);
}
};
}
example!();
然而,在所有情况下都不可能。例如,您不能发出只是属性,因为该属性应该附加到项目上:
macro_rules! example {
() => {
#[test]
};
}
// Fails!
example!();
fn test() {
assert!(false);
}
您的实际问题更接近于“是否可以在属性中调用宏”。答案似乎是没有 - 解析器不期望在该位置进行宏扩展。您可能希望查看代码生成或过程宏,具体取决于您要执行的操作。