Blog
网站首页
关于Rust声明宏的卫生性
关于Rust声明宏的卫生性
2024-05-21 17:55
2024-05-21 17:59
作者:
xmh0511
提交
宏的卫生性实际是通过影响对标识符查找实现的。首先确定一个概念是,两个相同的标识符必须满足以下所有: 1. 组成该表示的序列相同, 2. 词法上下文相同 两个名称相同,但句法上下文(想象成通过颜色标记)不同的*identifier*不表示同一个标识符,因此当对某个*identifier*进行名称查找的时候(确定该`name`表示的实体),会自动忽略那些句法上下文不同的同名标识符的声明,即跳过这些声明继续往外查找直到找到引入具有相同标识符的声明。 名称查找只作用于**使用**的*identifier*,如果identifier是正在声明的,名称查找不会作用于该*identifer*,声明引入的实体最终由宏展开时的上下文决定. 宏定义中的*identifer*会在每次展开宏的时候被赋予独一无二的句法上下文。宏中**使用**的*identifer*s最终会查找宏定义上下文中该标识符所表示的实体(被认为是最外层,如果没有被任何内层声明且名称查找能找到的*identifer*遮挡的情况下)。