Rustのマクロ。macro_rules

私はこの日を長い間延期しましたが、永遠に延期することは不可能でした。さて、時が来ました。いよいよRustマクロを理解する時が来ました。まあ、または少なくとも開始します。





それらを使用する理由をすぐに定義しましょう。マクロはメタプログラミングに関するものであり、部分的にはリフレクションプログラミングに関するものです。もちろん、私はパターンや標準の開発者ではありませんが、関数の代わりにマクロ(macro_rulesで宣言されています!)を使用することは、私の意見では悪い考えです。まず、関数は特定の型の変数を受け入れ、変数を受け入れるマクロはその型cornyを知らないため、操作の意味は、マクロ自体の名前と署名によってのみ理解できます。そして、マクロの構文はそれほど明白ではありません...





しかし、うまくいけば、この記事があなたにとってそれをより明確にするでしょう。





このmacro_rulesはどんな獣なのか!?

. macro_rules! - , . - , , unwrap. , , , .





, .





:





macro_rules! uncover{







    ($var:ident) => {







        match $var{







            Some(t) => t,







            None => panic!("None value")







        }







    }







}







fn main(){







    let x = Some(2i32);







    let unwrapped = uncover!(x);







    println!("{}", unwrapped);







}







-… . ? -, uncover: 





macro_rules! uncover







$var ident. , ident , . , .





- , , . , $var - , uncover ( , ).





, Rust , , : . , ? , . :





let unwrapped = uncover!(x);







:





let unwrapped = match x{







    Some(t) => t,







    None => panic!(“None value”)







};







- . , ( - inline-).  





let x = 2i32;







let unwrapped = uncover!(x);







, - . -, , .





Summary

, , , ? , . , , ? O(1) : list![1,2,3] ? ? , macro_rules! -, , proc_macro, syn, qoute TokenTree, - .





実際、それがすべてです。macro_rulesを使用してマクロを作成することはそれほど難しくありません。主なことは、基本的なルールを理解することです。多分それはあなたの神経やお金を節約するでしょう。もちろん、私はこの記事で最も興味深いものには触れませんでした。これは最も単純なものです。この記事の目的は、マクロが簡単であることを示すことです。





proc_macroとsynに関する記事が必要な場合は、実際に見るべきものがあります。








All Articles