2016-11-09 21 views
4

ループを壊すマクロを使用しますが、どの外部ループを抜け出すかを定義するためにラベルを渡したいと思います。式が構文エラーを出したに引数を渡す名前付きループラベルをRustのマクロに渡すにはどうすればいいですか?

、私は仕事にこれを得ることができた唯一の方法はblockに渡すことでしたが、これは例えば、非常にエレガントではありません。

my_macro({ break 'outer; }); 

です合格するためにそこ方法:

my_macro('outer); 

... break $my_label;としてマクロに記述することができbreak 'outer;に展開?万能tt(トークン木)としてそれを渡す

答えて

6

は動作します:将来の読者に

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"); 
} 

Playground

は、マクロパラメータの有効期間指定子を追加するaccepted RFCあります。

関連する問題