目次

Rustの勉強[マクロ その6]

ぎじゅつ

はじめに

#

NO IMAGEマクロ - The Rust Programming Language 日本語版

を読んでいる。

お勉強

#

NO IMAGEマクロ - The Rust Programming Language 日本語版

メモ

#
  • 〇〇風マクロが2種類ある

deriveは構造体とenumにしか使えませんでしたが、属性は関数のような他の要素に対しても使えるのです。属性風マクロを使った例を以下に示しています:webアプリケーションフレームワークを使っているときに、routeという関数につける属性名があるとします:

#[route(GET, "/")]
fn index() {
  • Spring Bootで見たな
#[proc_macro_attribute]
pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream {
  • ああそうか、今までとは違って引数が2つあるんだな

関数風マクロは、関数呼び出しのように見えるマクロを定義します。

  • なるほど
let sql = sql!(SELECT * FROM posts WHERE id=1);
  • これが
#[proc_macro]
pub fn sql(input: TokenStream) -> TokenStream {
  • こうなる

まとめ

#
  • おおーマクロ終わったぞ!
  • 次のプロジェクト学ぼうか悩んだが、それやるぐらいなら自分で書くかー
  • やったーおわりー