如何解决“ quote”宏如何实现插值?
quote
(声明性)和proc_quote
(过程性)宏如何允许对局部变量进行插值?
(声明性)宏很卫生,因此我希望它们无法访问被调用的环境。
解决方法
(声明性)宏很卫生,因此我希望它们无法访问被调用的环境。
为什么?
vec![a,b,c]
工作正常。
宏卫生并不意味着他们无法访问被调用的环境(这将使它们完全无用),这意味着它们不会意外地影响他们所处的环境重新调用,也就是说,宏的内部符号不会泄漏到环境符号中也不会与环境符号冲突。
例如,使用C宏,宏内部和外部的名称都生活在完全相同的名称空间中,因此可能会发生冲突和奇怪的副作用。