[−][src]Function tao_of_rust::ch12::macros::hygienic_test
pub fn hygienic_test()
宏系统: 声明宏的卫生性
Basic usage: 展示宏的卫生性
该代码报错
macro_rules! sum { ($e:expr) => ({ let a = 2; $e + a }) } fn main(){ // error[E0425]: cannot find value `a` in this scope let four = sum!(a); }Run
假想中sum!宏会生成的代码
// fn main(){ // let four = { // let a = 2; // a + a // }; // }Run
说明:
宏定义中的变量a和外部传入的同名a,Rust会识别它们为两个不同的变量. 宏定义中的作用域是独立的。但是目前Rust的卫生性并不完善,生命周期、类型等都无法保证卫生性。