ada - Ada:重新导出枚举类型值
问题描述
我有一个 ada 包,形式为
package C is
type Test is (Test_1, Test_2, Test_3);
end C;
和另一个形式的包
with C;
package B is
subtype Test is C.Test;
end B;
还有另一种形式
with B;
package A is
subtype Test is B.Test;
Item: Test := Test_1;
end A;
天真地,我希望 B 中定义的子类型(后来由 A 子类型化)能够访问原始类型的成员。但是,经过检查,C 的成员甚至在 B 的范围内都不可见。这可以通过添加来use c;
解决,这在一定程度上似乎是一个解决方案,但是要在 A 中使用它,您必须添加with c; use c;
到每个传递依赖于 C 的包。这可能会导致混淆,因为您应该使用 C 并不明显。
我希望能够“重新导出”这些类型,以便更好地抽象程序的层。
解决方案
如果您将包 A 更改为
with B;
package A is
subtype Test is B.Test;
use all type Test;
Item: Test := Test_1;
end A;
代码编译。不确定这是否会有所帮助。
这是 Ada 2012 的功能;参见ARM 8.4(8)和 (8.1)。use all type
使类型的原始操作可见(包括枚举文字)。
推荐阅读
- python - 有没有办法比较位于 json 中的两个列表的元素?
- python - 如何在python中查询和排序嵌套的mongodb信息?
- javascript - 模块集成问题 discord.js bot
- javascript - 安装 @discordjs/opus 模块以播放 mp3 音频时出现 Discord.js 错误
- pandas - 熊猫:为什么用查询()而不是括号运算符?
- javascript - 在编辑中上传图像不保存 C# MVC
- c - 使用 realloc 在 C 中动态增加数组大小
- json - 如何从 json 字符串中获取颜色值并在 Flutter Dart 中使用它
- celery - 为我的 django 应用程序在 celery 中扩展定期任务
- python - sqlalchemy.exc.IntegrityError:(psycopg2.errors.NotNullViolation)列“id”中的空值违反非空约束