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

题目#

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 协议》,转载必须注明作者和本文链接