我似乎无法找到有关如何执行此操作的任何信息。有没有人知道如何将数组传递给一个过程,就像你将一个字符或整数一样?
例子会很棒。
答案 0 :(得分:5)
首先,您必须拥有一个命名数组类型。匿名类型不起作用(匿名类型在任何情况下都是一个坏主意)。
例如,在包标准中声明了一个名为String的数组类型:
type String is array (Positive range <>) of Character;
String与任何其他数组类型没有区别。您可以将String(或任何其他数组类型)完全按照其他任何类型的方式传递给子程序:
function Index (Source : in String; Pattern : in String) return Natural;
procedure To_Upper (Source : in out String);
答案 1 :(得分:3)
正如Jeffrey所说,你需要一个类型名称。在Ada语法中有一些地方需要一个没有装饰的简单类型名称,以及其他可以使用匿名数组类型或附加其他约束的名称的地方。参数声明是一个类型必须是简单名称的地方(除了您可以添加not null
的访问类型之外,您可能还没有学到它,但这是唯一的例外)。因此,你不能说
procedure joiningTo(A: in integer; B: array(1..12, 1..12) of character) is
或
procedure Print_Field(Data : String(1..30)) is
因为在此上下文中名称必须是简单的类型名称。有几种解决方案,您需要选择哪种更合适。如果joiningTo
可以正确处理任何长度和宽度的数组,那么在程序中的某个地方定义一个无约束的数组类型:
type Two_Dimensional_Char_Array is array (positive range <>, positive range <>) of character;
procedure joiningTo(A : in integer; B : in Two_Dimensional_Char_Array) is
另一方面,如果要求参数正好是12乘12,则可以定义包含约束的类型或子类型名称:
type Twelve_Square is array (1..12, 1..12) of character;
procedure joiningTo(A : in integer; B : in Twelve_Square) is
或
type Two_Dimensional_Char_Array is array (positive range <>, positive range <>) of character;
subtype Twleve_Square is Two_Dimensional_Char_Array (1..12, 1..12);
procedure joiningTo(A : in integer; B : in Twelve_Square) is
(旁注:Ada中的标准命名约定,因为Ada 95,大写每个单词的第一个字母[通常],单独的单词带有_
个字符;这与Java或C _
字符不受欢迎的C社区。另外,值得注意的是,与Java或C不同,Ada不关心标识符中的字母大小写。)