我来自Java / C ++到Ada,我很难搞清楚这些小东西。是否可以声明一个数组并询问用户最小/最大值然后初始化它?我不喜欢为MIN和MAX定义常量值,似乎应该有办法做到这一点。
您可以定义无约束类型,但仍需要在程序启动之前初始化声明块中的大小。我是否需要拥有包体,然后是程序声明,然后在实际完成工作的过程中的声明块,如下所示?
PACKAGE BODY Build_Graph IS
TYPE Graph_Box IS ARRAY(Integer RANGE <>, Integer RANGE <>) of Character;
PROCEDURE Print_Graph(Min, Max, Height, Width: IN Integer) IS
BEGIN
DECLARE
Graph: Graph_Box(0..Height, 0..Width);
BEGIN
Do_Stuf(Graph);
END;
END Print_Graph;
END Build_Graph;
答案 0 :(得分:2)
你在那里展示的应该是有效的。但是,“声明”块是完全不可靠的,除非您想要捕获数组变量声明中的范围异常或其他内容。我把它改为:
procedure Print_Graph(Min, Max, Height, Width: in Integer) is
Graph: Graph_Box(0..Height, 0..Width);
begin
Do_Stuf(Graph);
end Print_Graph;
(我也不喜欢在大写字母中保留单词。)
我还应该提一下:Ada数组 不像cish语言那样基于0。他们可以,但你也可以让他们从1,或200开始,或任何你想要的。
我提出这个问题的原因是我看到你定义Graph_Box的方式实际上是Height + 1个元素高和Width + 1个元素宽。你可能不希望这样,因为它可能会让某些人后来混淆(甚至可能是你)。
我的典型习惯是将数组索引设为1,除非我有充分的理由不这样做。