[][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的卫生性并不完善,生命周期、类型等都无法保证卫生性。