我有这个宏:
macro_rules! set_vars {
( $($x:ident),* ) => {
let outer = 42;
$( let $x = outer; )*
}
}
这扩展了这个调用:
set_vars!(x, y, z);
进入我的期望(来自--pretty=expanded
):
let outer = 42;
let x = outer;
let y = outer;
let z = outer;
在随后的代码中,我可以打印x
, y
, 并且z
很好,但outer
似乎未定义:
error[E0425]: cannot find value `outer` in this scope
--> src/main.rs:11:5
|
11 | outer;
| ^^^^^ not found in this scope
outer
如果我将它作为显式宏参数传递,我可以访问该变量。
这是故意的,与“宏观卫生”有关吗?如果是这样,那么--pretty=expanded
以某种特殊方式标记这些“内部”变量可能有意义吗?