Ada私有子包(private child packages)父包元素可见性问题
结论
该行为完全符合Ada语言规范,不属于编译器的非标准扩展特性。
背后的核心规则
- Ada语言标准明确规定:所有子包都会隐式
with父包的规范,同时父包规范内声明的所有标识符,会直接在子包的声明作用域内可见,不需要额外编写use语句,也不需要添加父包名前缀。该规则从Ada 83版本就已纳入标准,属于Ada包体系的基础可见性设计。 - 你使用的是私有子包
Root.Child,除了父包的公开部分外,父包私有部分声明的标识符也同样在子包内直接可见,和你已知的「私有子包可访问父包私有部分」的规则完全匹配。 - 你在子包过程中直接写
Root_t和写全限定名Root.Root_t是完全等价的,只有当子包内部自己声明了同名的Root_t标识符时,才会触发作用域遮蔽规则,优先匹配子包内的声明。
内容的提问来源于stack exchange,提问作者Albatros23
相关产品推荐
相关产品推荐

