我正在尝试做类似以下的事情:
macro_rules! attr_trial {
($msg:expr) => {{
let id = env!("SOME_ENV");
#[link_section = env!("SOME_ENV")]
static MESSAGE: &'static str = $msg;
}};
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
error: unexpected token: `env`
--> src/main.rs:34:18
|
34 | #[link_section = env!("SOME_ENV")]
| ^
Run Code Online (Sandbox Code Playgroud)
是否可以从宏中发出Rust属性?
当然,这是可能的.这是一个从宏中发出test属性的宏:
macro_rules! example {
() => {
#[test]
fn test() {
assert!(false);
}
};
}
example!();
Run Code Online (Sandbox Code Playgroud)
然而,在所有情况下都不可能.例如,您不能仅发出属性,因为该属性应附加到项目:
macro_rules! example {
() => {
#[test]
};
}
// Fails!
example!();
fn test() {
assert!(false);
}
Run Code Online (Sandbox Code Playgroud)
您的实际问题更接近于"是否可以在属性中调用宏".答案似乎是否定的 - 解析器不期望在该位置进行宏扩展.您可能希望查看代码生成或过程宏,具体取决于您要执行的操作.
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |