rust-quiz:024-local-and-const-hygiene.rs

godme發表於2022-07-15
fn main() {
    let x: u8 = 1;
    const K: u8 = 2;

    macro_rules! m {
        () => {
            print!("{}{}", x, K);
        };
    }

    {
        let x: u8 = 3;
        const K: u8 = 4;

        m!();
    }
}
  • 衛生
    看過macro_rules的都知道衛生性。
    這裡簡單的描述一下宏內部對於變數引用的特質
    • 變數:選擇宣告時候最近的值進行固化
    • 常量:不進行固化

根據上述性質,對於x會選取1進行固化。
而針對K,並不會進行固化,也就是隻會選取最近的4作為內部值。
因此列印的是14

14

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章