宏入门
Rust
提供了一个强大的宏,可进行元编程(metaprogramming
)。看起来和函数很想,只不过名称末尾有一个感叹号
之前使用过的一些println!
、vec!
和format!
等是。
元编程:用代码生成代码、控制代码、扩展代码
案例:
Java
的注解php
的eval
最简单的宏
macro_rules! me {
() => {
println!("无解");
};
}
fn main() {
me!();
}
在src
下和main.rs
同级宏
macro_rules! echo {
() => {
println!("无解");
};
}
#[macro_use]
mod mymacros;
fn main() {
echo!();
}
注意
使用mod
引用之后,还得加上#[macro_use]
来使用宏这个注解。
加入参数,前面写前缀,后面加上冒号,再加上表达式或者别的
macro_rules! echo {
() => {
println!("无解");
};
// 前缀: 表达式
($exp: expr) => {
println!("{}", $exp);
};
}
多个以分号隔开。
#[macro_use]
mod mymacros;
fn main() {
echo!();
echo!("abc");
let a = 3;
echo!(a == 3);
}
cargo run
无解
abc
true # 表达式的结果
改成使用stringify!
包裹直接打印出表达式的内容
macro_rules! echo {
() => {
println!("无解");
};
// 前缀: 表达式
// ($exp: expr) => {
// println!("{}", $exp);
// };
($exp: expr) => {
println!("{}", stringify!($exp));
};
}