arrays - 无法打印字符串常量数组字符串的内容?

我是 Ada 的初学者,我正在尝试声明和使用不同长度的字符串数组。

使用 Ada'83,我可以声明一个可变长度字符串常量数组,如下所示(示例取自 Ada FAQ)

type table is access String;

 TESTS : constant array (Positive range 1..3) of table
         := ( 1 => new String'("One"),
              2 => new String'("Two"),
              3 => new String'("Three")
            );

尽管结果看起来是字符数组的数组,但令我感到沮丧的是,它们的行为并不像字符串。当我尝试编译以下代码时,我收到一条错误消息“在重载解析期间检测到不一致 [LRM 8.7]”

for COUNT in TESTS'Range loop
   Put(TESTS(COUNT));
   New_Line;
end loop;

但是,我可以使用以下代码打印出每个“字符串”的内容。

for COUNT in TEST'Range loop
   for COUNTER in TEST(COUNT)'Range loop
      Put(TEST(COUNT)(COUNTER));
   end loop;
   New_Line;
end loop;

不幸的是,我想使用这些值来测试一些将字符串作为参数的代码,所以这并没有真正帮助...

有没有一种方法可以在 Ada'83 中迭代一个变长的字符串常量数组,或者将字符数组转换为变长的字符串。

谢谢

不,这不是家庭作业,是的,我知道我使用的是一个古老的编译器!

最佳答案

Test 未定义;我假设您指的是测试

Table 不是字符串类型;它是一种访问类型。要引用访问值指定的值,可以使用 .all:

Tests (Tests'First).all

是一个字符串。 Ada 包含一些访问数组类型的快捷方式,使它们更易于使用,允许 .all 在属性和索引之前被省略,这就是为什么 Tests (Count)'RangeTests (Count) (Counter) 工作。但是,要引用整个值,.all 是必需的:

Text_IO.Put_Line (Item => Tests (Counter).all);

但是,更好的方法是定义一个可变长度的字符串抽象并使用它来代替访问类型。

https://stackoverflow.com/questions/66947081/

相关文章:

flutter - 运算符 '*' 不能无条件调用,因为接收者可以是 'null' 。尝试向目标 (

java - 将 java.util.function.Function 定义为 static fi

docker - 未知速记标志 : 'a' in -a in docker

javascript - 使用 JavaScript 中的动态属性对数组中的所有对象项求和

javascript - 数组 .includes() 给出意外行为

r - 如何根据在ggplot中分配的概率对单词重新排序

c# - 手动创建 JSON

python - Django 在速记渲染方法中添加自定义 header

java - 使用 java Supplier 接口(interface)创建条件对象

java - 如何总结对象流的数字属性?