`quote` 宏是如何实现插值的?

How does the `quote` macro achieve interpolation?

quote(声明式)和 proc_quote(过程式)宏如何允许对局部变量进行插值?

由于(声明性)宏是卫生的,我预计它们将无法访问调用它们的环境。

Since (declarative) macros are hygienic, I would expect that they wouldn't be able to access the environment they're called in.

为什么?

vec![a, b, c]

工作正常。

卫生的宏并不意味着它们无法访问调用它们的环境(这会使它们完全无用),这意味着它们不会意外影响 调用的环境,即宏的内部符号既不会泄露也不会与环境符号冲突。

例如使用 C 宏,宏内部和外部的名称位于完全相同的命名空间中,因此可能会发生冲突和奇怪的副作用。