使用一个突破循环的宏可以工作,但我想传入一个标签,以便能够定义哪个外部循环突破。
将参数作为表达式传递给出了语法错误,我设法使其工作的唯一方法是传入block
但是这并不是非常优雅,例如:
my_macro({ break 'outer; });
有没有办法通过:
my_macro('outer);
...可以在宏中写为break $my_label;
,扩展为break 'outer;
?
答案 0 :(得分:6)
将其作为多功能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");
}
对于未来的读者,有一个accepted RFC为宏参数添加了一个生命周期说明符。