在Ada中,我们可以使用范围获取任何数组的数组切片,包括String . 例如:
Name( 1 .. 3 )
我们也可以在for循环中使用一个范围:
for I in 1 .. 10 loop
--do something
end loop;
或者,我们可以按如下方式迭代数组:
for I in X'Range loop
X(I) := Function_Call;
end loop;
所以,我目前的思路是“1 .. 3”形式的范围是Range文字,很像“3”是整数字面,而X'Range是一个返回索引范围的属性 . 数组X(或类似地,某些有序类型X,例如整数或枚举) .
目前,我有一些看起来像这样的代码:
Name( 1 .. 3 )
我一直觉得像这样的神奇数字不是一个好主意,所以我想我可以定义两个常量:
Name_Prefix_Range_Begin : constant Integer := 1;
Name_Prefix_Range_End : constant Integer := 3;
然后这样做:
Name( Name_Prefix_Range_Begin .. Name_Prefix_Range_End )
但是,如果可以使用Range类型的常量,我觉得它会更清晰,只需编写以下代码来获取我的数组切片:
Name ( Name_Prefix_Range )
那么,最后,在所有这些之后,是否可以声明一个可以存储范围的变量或常量?怎么写的?我已经做出了无法编译的猜测,并且未能找到任何关于这种可能性的参考 .
1 回答
切片和一些其他采用范围的结构也可以采用子类型名称 .
然后你可以使用
以及
在语言语法中,您可以在需要
discrete_range
的任何位置使用类似的子类型名称 . RM 4.1.2中的切片语法使用它 .请注意,当我说"subtype name"时,这包括由
type
声明定义的"type name";该名称在技术上是"first subtype"名称 . 所以说法语合法但是你会在运行时得到
Constraint_Error
. 更合法的是做这样的事情: