gpt4 book ai didi

java - Ada 中的初始化数组边界

转载 作者:行者123 更新时间:2023-12-01 08:05:48 26 4
gpt4 key购买 nike

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

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 中创建一个数组而不定义边界,然后在插入后在主体中定义边界?

我希望我已经很好地解释了我的问题,以便您能够理解。谢谢。

最佳答案

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) block 中的声明(以 declare 开头)在执行语句时进行评估(事实上, block 一种语句),因此它将使用此时已设置的LL。 (2) 变量larray仅在声明它的 block 内可见。

关于java - Ada 中的初始化数组边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21742757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com