Skip to content
Rust

Macros

Declarative and procedural macros.

By EZ4Code Team
macromacro

Code

// Declarative macro
macro_rules! vec_of {
    ($($x:expr),*) => {{
        let mut v = Vec::new();
        $( v.push($x); )*
        v
    }};
}

macro_rules! calculate {
    (eval $e:expr) => {
        {
            let val: usize = $e;
            println!("{} = {}", stringify!($e), val);
        }
    };
}

// HashMap initialization macro
macro_rules! hashmap {
    ($($key:expr => $value:expr),*) => {{
        let mut map = std::collections::HashMap::new();
        $( map.insert($key, $value); )*
        map
    }};
}

fn main() {
    let v = vec_of!(1, 2, 3, 4, 5);
    println!("{:?}", v);

    calculate!(eval 1 + 2 * 3);

    let scores = hashmap!(
        "Alice" => 10,
        "Bob" => 20
    );
    println!("{:?}", scores);

    // Built-in macros
    println!("file: {}", file!());
    println!("line: {}", line!());
    println!("crate: {}", module_path!());
}

Explanation

macro_rules! defines declarative macros, generating code via pattern matching; built-in macros provide compile-time info.

More Rust Snippets