Ada中的初始化数组边界

时间:2014-02-13 00:12:57

标签: java arrays types linked-list ada

我在ada中编写双循环链表的包时遇到了问题。 我专门编写了一个函数,它将获取我的DCLL并以数组形式返回它的内容。 在我的spec文件中,我创建了类似这样的类型

type ListArray is array(Integer range <>) of Integer;

我的问题是,当客户端调用我的包时,我一直收到“长度检查失败”错误。 这是客户端程序(部分)

procedure tester is

   LL : sorted_list.List;
   larray : sorted_list.ListArray(1..sorted_list.length(LL));

   begin
   sorted_list.Insert(LL, 5);
   larray:= sorted_list.toArray(LL);
   end;

我知道这是失败的,因为当我定义larray并将其设置为长度时,长度为0,因为LL还没有任何内容。 在java中,我只是在插入后在代码体中初始化数组,但似乎在ada我不能这样做(或者至少我不知道如何) 无论如何在ada中创建一个数组而不定义边界,然后在插入后定义体内的边界?

我希望我能够很好地解释我的问题,让你明白。 感谢。

1 个答案:

答案 0 :(得分:6)

procedure tester is

    LL : sorted_list.List;

begin
    sorted_list.Insert(LL, 5);
    declare
        larray : sorted_list.ListArray(1..sorted_list.length(LL));
    begin
        larray := sorted_list.toArray(LL);
        -- code that uses larray must be in this block
    end;
end;

procedure tester is

    LL : sorted_list.List;

begin
    sorted_list.Insert(LL, 5);
    declare
        larray : sorted_list.ListArray := sorted_list.toArray(LL);
            -- no need to specify the bounds, it will take them from the bounds
            -- of the result returned by toArray
    begin
        -- code that uses larray must be in this block
    end;
end;

需要注意的几点:(1)块中的声明(以declare开头)在执行语句时进行评估(事实上,块一种语句),因此它将使用此时设置的LL。 (2)变量larray仅在您声明它的块内可见。