使用宏可以跳出循环,但是我想传入一个标签,以便能够定义要跳出哪个外部循环。
将参数作为表达式传递给语法错误,我设法使其工作的唯一方法是传递block
,但这不是很优雅,例如:
my_macro({ break 'outer; });
有没有办法通过:
my_macro('outer);
…可以在宏中写成break $my_label;
,展开成break 'outer;
?
将其作为通用的tt
(令牌树)传递:
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");
}
游乐场对于未来的读者,有一个公认的RFC为宏参数添加了生命周期说明符。