宏
macro_rules! say_hello { () => { println!("Hello, Friends"); }; ($name:expr) => { println!("Hello, {}", $name); };}
fn main() { say_hello!(); say_hello!("John");}macro_rules! nameof { ($name:ident) => { stringify!($name) };}
struct Person;
fn main() { println!("{}", nameof!(Person));}macro_rules! create_fn { ($name:ident, $body:expr) => { fn $name() -> i32 { $body } };}
fn main() { create_fn!(get_one, 1); create_fn!(get_two, 2);
println!("{}", get_one()); println!("{}", get_two());}macro_rules! create_struct { ($name:ident, $($field_name:ident: $field_type:ty),*) => { #[derive(Debug)] struct $name { $($field_name: $field_type),* }
impl $name { fn new($($field_name: $field_type),*) -> Self { Self { $($field_name),* } } } };}
fn main() { create_struct!(Person, name: String, age: i32);
let person = Person::new(String::from("John"), 18); println!("person: {:#?}", person);}macro_rules! create_struct { ($name:ident, $($field_name:ident: $field_type:ty),*) => { #[derive(Debug)] struct $name { $($field_name: $field_type),* }
impl $name { fn new($($field_name: $field_type),*) -> Self { Self { $($field_name),* } } } };}
fn main() { create_struct!(Person, name: String, age: i32);
let person = Person::new(String::from("John"), 18); println!("person: {:#?}", person);}macro_rules! hashmap { ($($key:expr => $value:expr),* $(,)?) => { { use std::collections::HashMap; let mut map = HashMap::new(); $(map.insert($key, $value);)*
map } };}
fn main() { let map = hashmap! ( "a" => 1, "b" => 2, "c" => 3, );
println!("map: {:#?}", map);}