特定域语言是嵌入在Rust宏中最小的语言。因为Rust宏系统将其扩展到正常的Rust结构中,所以它是完全可用的,但是它看上去就像一个小语言。这就允许你为某个特定的函数(使用约束)定义某种简洁而直观的语法。
假如我想定义一个小计算器的API。并且提供一个表达式,输出到控制台窗口。
macro_rules! calculate {
(eval $e:expr) => {
{
let val: usize = $e; // Force types to be unsigned integers
println!("{} = {}", stringify!{$e}, val);
}
};
}
fn main() {
calculate! {
eval 1 + 2 // hehehe `eval` is _not_ a Rust keyword!
}
calculate! {
eval (1 + 2) * (3 / 4)
}
}
输出结果:
1 + 2 = 3
(1 + 2) * (3 / 4) = 0
这是一个非常简单的示例,更复杂的接口还在开发中,例如:lazy_static或clap。
注意,宏内有两个大括号,外面的是macro_rules!的语法的一部分,小括号和方括号不包含在内。