Rustのマクロのメモ。
|
|
マクロは、プリコンパイル時点で展開されてソースコードを置き換える機能。
Rustのマクロは(C言語のマクロのような文字列置換に近いものではなく)Rustの構文に則った変換を行う。
Rustのマクロには宣言的マクロと手続き的マクロがある。
宣言的マクロは、println!()やvec![]のような、関数呼び出しっぽい形で使用するマクロ。
手続き的マクロは、#[derive]属性でソースコードを自動生成するやつとか。
宣言的マクロは関数呼び出しのような形で使う。
宣言的マクロを呼び出す時は、マクロ名の後ろに「!
」を付ける。(逆に、「!
」が付いていればマクロだと分かる)
println!("test"); let vec = vec![1, 2, 3];
マクロの引数を丸括弧で囲むか角括弧で囲むか波括弧で囲むかは自由。
通常はマクロ毎の慣例に沿ったもので囲む。
println!("test"); println!["test"]; println! {"test"} // 波括弧のときは末尾のセミコロンは不要 let vec = vec!(1, 2, 3); let vec = vec![1, 2, 3]; let vec = vec!{1, 2, 3};