如何将数组传递给Ada中的过程?

时间:2015-02-20 16:50:08

标签: ada

我似乎无法找到有关如何执行此操作的任何信息。有没有人知道如何将数组传递给一个过程,就像你将一个字符或整数一样?

例子会很棒。

2 个答案:

答案 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不关心标识符中的字母大小写。)