arrays - 记录数组的数组
问题描述
我需要创建一个常量记录数组的常量数组,我可以在其中通过数字引用外部数组的每个元素。
我试过了:
A : constant array (0 .. 3) of B := (B1, B2, B3, B4)
其中 B 是记录数组,B1,B2,B3,B4 是 B 类型的常量数组。
但是当我这样做时,我得到了错误:“数组声明中的不受约束的元素类型”
type C is record
a : Integer := 0;
b : Integer := 0;
c : Integer := 0;
d : Integer := 0;
end record;
type B is array (Natural range <>) of C;
B1 : constant B := (0, 0, 0, 0);
B2 : constant B := (2, 0, 2, 0);
B3 : constant B := (0, 1, 0, 1);
B4 : constant B := (2, 1, 2, 1);
A : constant array (0 .. 3) of B := (B1, B2, B3, B4);
我希望使用 A 能够像这样以数字方式引用 B1、B2、B3、B4:
A (1) 返回 B1
A (2) 返回 B2
等等...
(如果我使用的术语有误,我深表歉意。我对 Ada 有点陌生,并且一直在通过反复试验来学习......)
解决方案
您的问题是这B
是一个不受约束的数组:
type B is array (Natural range <>) of C;
这对 来说很好B1 : constant B := (0, 0, 0, 0);
,因为常量定义创建了一个新的匿名类型,其范围取自 Right-Hand-Side。
但是,对于A
. 编译器需要知道数组元素的大小,但当元素(B
在这种情况下)不受约束时则不能。此外,所有元素的约束('First
、'Last
等)必须相同。
您可以更改B
要约束的定义:
type B is array (Natural range 1..4) of C;
这将强制您的所有B1
,B2
等始终具有四个元素,这就是您在示例中已有的元素。
另外,如果你想A(1)
返回B1
,你应该改变A
从 1 开始的范围:
A : constant array (1 .. 4) of B := (B1, B2, B3, B4);
推荐阅读
- javascript - 尝试使用 ipp 协议从网页(PWA 应用程序)打印
- webpack-dev-server - 构建自定义数据时 webpack-web-server 未启动(getBuildableComponents 问题)
- visual-studio-2019 - VS2019 热重载
- flutter - 你如何设置一个颤振的 rawkeyboardlistener 来读取 {} (大括号)而不是方括号?
- typescript - 如何获取打字稿定义类型的键?
- python - 理解和优化 Python 的内存槽
- python - 类型错误:尝试写入 csv 文件时需要一个类似字节的对象,而不是“str”
- dataframe - 如何获取 Julia DataFrame 的内存大小?
- python - python项目是否有任何依赖文件。像 composer.json 或 package.json?
- php - 无法连接到数据源:库“gds32.dll”加载失败 - Firebird Connection PHP odbc_connect