使用跳出循环的宏是可行的,但我想传入一个标签以便能够定义要跳出哪个外部循环。
将参数作为表达式传递给语法错误,我设法让它工作的唯一方法是传递一个 block
但这不是很优雅,例如:
my_macro({ break 'outer; });
有没有办法通过:
my_macro('outer);
... 可以在宏中写为 break $my_label;
扩展为 break 'outer;
?
最佳答案
将其作为多功能 tt
( token 树)工作:
macro_rules! my_break {
($label:tt) => { break $label; }
}
fn main() {
'outer: loop {
println!("Start of outer");
loop {
println!("Start of inner");
my_break!('outer);
println!("Not reachable");
}
println!("End of outer");
}
println!("End of main");
}
对于 future 的读者,有一个 accepted RFC为宏参数添加生命周期说明符。
关于macros - 如何将命名循环标签传递给 Rust 中的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40509400/