読者です 読者をやめる 読者になる 読者になる

Macros

https://doc.rust-lang.org/book/macros.html

マクロ。

/* vec!と同じ働きをするマクロ定義 */
macro_rules! myvec {
    ( $( $x:expr ),* ) => {
        {
            let mut temp_vec = Vec::new();
            $(
                temp_vec.push($x);
            )*
            temp_vec
        }
    };
}

macro_rules! o_O {
    (
        $(
            $x:expr; [ $( $y:expr ),* ]
        );*
    ) => {
        &[ $($( $x + $y ),*),* ]
    }
}

macro_rules! foo {
    ($v:ident) => (let $v = 3;);
    () => ( fn b() { println!("b"); } );
}

fn main() {
    let x: Vec<u32> = myvec![1, 2, 3];
    println!("{:?}", x);

    let a: &[i32]
        = o_O!(10; [1, 2, 3];
                20; [4, 5, 6]);
    assert_eq!(a, [11, 12, 13, 24, 25, 26]);

    foo!(x);
    println!("{}", x);
    foo!();
    b();
}
$ cargo run
[1, 2, 3]
3
b